Configuring and operating a XaaS model in a datacenter

ABSTRACT

Some embodiments provide novel inline switches that distribute data messages from source compute nodes (SCNs) to different groups of destination service compute nodes (DSCNs). In some embodiments, the inline switches are deployed in the source compute nodes datapaths (e.g., egress datapath). The inline switches in some embodiments are service switches that (1) receive data messages from the SCNs, (2) identify service nodes in a service-node cluster for processing the data messages based on service policies that the switches implement, and (3) use tunnels to send the received data messages to their identified service nodes. Alternatively, or conjunctively, the inline service switches of some embodiments (1) identify service-nodes cluster for processing the data messages based on service policies that the switches implement, and (2) use tunnels to send the received data messages to the identified service-node clusters. The service-node clusters can perform the same service or can perform different services in some embodiments. This tunnel-based approach for distributing data messages to service nodes/clusters is advantageous for seamlessly implementing in a datacenter a cloud-based XaaS model (where XaaS stands for X as a service, and X stands for anything), in which any number of services are provided by service providers in the cloud.

BACKGROUND

Datacenters today use a very static, configuration intensive way todistribute data messages between different application layers and todifferent service layers. A common approach today is to configure thevirtual machines to send packets to virtual IP addresses, and thenconfigure the forwarding elements and load balancers in the datacenterwith forwarding rules that direct them to forward VIP addressed packetsto appropriate application and/or service layers. Another problem withexisting message distribution schemes is that today's load balancersoften are chokepoints for the distributed traffic. Accordingly, there isa need in the art for a new approach to seamlessly distribute datamessages in the datacenter between different application and/or servicelayers. Ideally, this new approach would allow the distribution schemeto be easily modified without reconfiguring the servers that transmitthe data messages.

BRIEF SUMMARY

Some embodiments provide novel inline switches that distribute datamessages from source compute nodes (SCNs) to different groups ofdestination service compute nodes (DSCNs). In some embodiments, theinline switches are deployed in the source compute nodes datapaths(e.g., egress datapath). The inline switches in some embodiments areservice switches that (1) receive data messages from the SCNs, (2)identify service nodes in a service-node cluster for processing the datamessages based on service policies that the switches implement, and (3)use tunnels to send the received data messages to their identifiedservice nodes.

Alternatively, or conjunctively, the inline service switches of someembodiments (1) identify service-nodes cluster for processing the datamessages based on service policies that the switches implement, and (2)use tunnels to send the received data messages to the identifiedservice-node clusters. The service-node clusters can perform the sameservice or can perform different services in some embodiments. Thistunnel-based approach for distributing data messages to servicenodes/clusters is advantageous for seamlessly implementing in adatacenter a cloud-based XaaS model (where XaaS stands for X as aservice, and X stands for anything), in which any number of services areprovided by service providers in the cloud.

In some embodiments, an inline service switch performs load-balancingoperations to distribute data messages among several service nodes orservice-node clusters that perform the same service. Alternatively, orconjunctively, a service cluster in some embodiments can have one ormore load balancers that distribute data messages received for thecluster among the service nodes of the service cluster.

In some embodiments, at least one service cluster implements an elasticmodel in which one primary service node receives the cluster's datamessages from the inline service switches. This service node then eitherperforms the service on the data message itself or directs the datamessage (e.g., through L3 and/or L4 network address translation, throughMAC redirect, etc.) to one of the other service nodes (called secondaryservice nodes) in the cluster to perform the service on the datamessage. The primary service node in some embodiments elasticallyshrinks or grows the number of secondary service nodes in the clusterbased on the received data message load.

Some embodiments provide an inline load-balancing switch that statefullydistributes the service load to a number of service nodes based on oneor more L4+ parameters, which are packet header parameters that areabove L1-L4 parameters. Examples of L4+ parameters include session keys,session cookies (e.g., SSL session identifiers), file names, databaseserver attributes (e.g., user name), etc. To statefully distribute theservice load among server nodes, the inline load-balancing switch insome embodiments establishes layer 4 connection sessions (e.g., a TCP/IPsessions) with the data-message SCNs and the service nodes, so that theswitch (1) can monitor one or more of the initial payload packets thatare exchanged for the session, and (2) can extract and store the L4+session parameters for later use in its subsequent load balancingoperation.

In some embodiments, the inline switch establishes layer 4 connectionsession with a SCN and another session with a service node by performinga three-way TCP handshake with the SCN and another one with the servicenode. To relay data messages between the SCN and the service node, theinline switch in some embodiments can adjust the sequence numbers of therelayed data messages to address differences in sequence numbers betweenthe SCN and the service node.

Some embodiments provide a controller-driven method for reconfiguringthe application or service layer deployment in a datacenter. In someembodiments, one or more controllers define data-message distributionpolicies for SCNs in the datacenter, and push these policies, or rulesbased on these policies, to the inline switches of the SCNs. The inlineswitches then distribute the data messages to the data compute nodes(DCNs) that are identified by the distribution policies/rules as theDCNs for the data messages. In some embodiments, a distribution policyor rule is expressed in terms of a DCN group address (e.g., a virtual IPaddress (VIP)) that the SCNs use to address several DCNs that are in aDCN group.

This controller-driven method can seamlessly reconfigure the applicationor service layer deployment in the datacenter without having toconfigure the SCNs to use new DCN group addresses (e.g., new VIPs). Thecontroller set only needs to provide the inline switches with newdistribution policies or rules that dictate new traffic distributionpatterns based on previously configured DCN group addresses. In someembodiments, the seamless reconfiguration can be based on arbitrarypacket header parameters (e.g., L2, L3, L4 or L7 parameters) that areused by the SCNs. In other words, these packet header parameters in somecases would not have to include DCN group addresses. In someembodiments, the inline switches can be configured to distribute datamessages based on metadata tags that are associated with the packets,and injected into the packets (e.g., as L7 parameters) by applicationlevel gateways (ALGs). For example, as ALGs are configured to inspectand tag packets as the packets enter a network domain (e.g., a logicaldomain), the controller set in some embodiments is configured to pushnew distribution policies and/or rules to the inline switches thatconfigure these switches to implement new application or service layerdeployment in the network domain.

The preceding Summary is intended to serve as a brief introduction tosome embodiments of the invention. It is not meant to be an introductionor overview of all inventive subject matter disclosed in this document.The Detailed Description that follows and the Drawings that are referredto in the Detailed Description will further describe the embodimentsdescribed in the Summary as well as other embodiments. Accordingly, tounderstand all the embodiments described by this document, a full reviewof the Summary, Detailed Description, the Drawings and the Claims isneeded. Moreover, the claimed subject matters are not to be limited bythe illustrative details in the Summary, Detailed Description and theDrawing.

BRIEF DESCRIPTION OF THE DRAWINGS

The novel features of the invention are set forth in the appendedclaims. However, for purposes of explanation, several embodiments of theinvention are set forth in the following figures.

FIG. 1 illustrates an example of a multi-host system with the inlineservice switches.

FIG. 2 conceptually illustrates a process that an inline service switchperforms in some embodiments.

FIG. 3 illustrates different examples of service rules.

FIG. 4 conceptually illustrates distributing data message flows toservices nodes in one service node cluster.

FIG. 5 conceptually illustrates distributing data message flows todifferent service node clusters that perform the same service.

FIG. 6 illustrates an example of an ISS sequentially calling multipledifferent service nodes of different clusters.

FIG. 7 illustrates an example of an elastic service model that uses oneprimary service node and zero or more secondary service nodes.

FIG. 8 illustrates an example of sequentially forwarding a data messagefrom a VM to different elastically adjustable service cluster.

FIG. 9 conceptually illustrates another process that the inline serviceswitch performs in some embodiments.

FIG. 10 conceptually illustrates a process that a primary service nodeperforms in some embodiments of the invention.

FIG. 11 illustrates an example of a multi-host system with inlineservice switches that statefully distribute the service load to servicenodes.

FIG. 12 conceptually illustrates an example of extracting and re-using asession parameter.

FIG. 13 conceptually illustrates another example of extracting andre-using a session parameter.

FIG. 14 conceptually illustrates a process of some embodiments forprocessing a service request in a sticky manner from an associated VM.

FIG. 15 illustrates a more detailed architecture of a host computingdevice

FIG. 16 illustrates an example of a controller re-configuring theapplication layer deployment.

FIG. 17 illustrates another example of a controller re-configuring theapplication layer deployment.

FIG. 18 conceptually illustrates a process of some embodiments fordefining service policy rules for an inline switch.

FIG. 19 conceptually illustrates a process of some embodiments formodifying a service rule and reconfiguring inline service switches thatimplement this service rule.

FIG. 20 conceptually illustrates an electronic system with which someembodiments of the invention are implemented.

DETAILED DESCRIPTION

In the following detailed description of the invention, numerousdetails, examples, and embodiments of the invention are set forth anddescribed. However, it will be clear and apparent to one skilled in theart that the invention is not limited to the embodiments set forth andthat the invention may be practiced without some of the specific detailsand examples discussed.

Some embodiments provide novel inline switches that distribute datamessages from source compute nodes (SCNs) to different groups ofdestination service compute nodes (DSCNs). In some embodiments, theinline switches are deployed in the source compute nodes datapaths(e.g., egress datapaths). The inline switches in some embodiments areservice switches that (1) receive data messages from the SCNs, (2)identify service nodes in a service-node cluster for processing the datamessages based on service policies that the switches implement, and (3)use tunnels to send the received data messages to their identifiedservice nodes.

Alternatively, or conjunctively, the inline service switches of someembodiments (1) identify service-nodes clusters for processing the datamessages based on service policies that the switches implement, and (2)use tunnels to send the received data messages to the identifiedservice-node clusters. The service-node clusters can perform the sameservice or can perform different services in some embodiments. Thistunnel-based approach for distributing data messages to servicenodes/clusters is advantageous for seamlessly implementing in adatacenter a cloud-based XaaS model (where XaaS stands for X as aservice, and X stands for anything), in which any number of services areprovided by service providers in the cloud.

A tunnel uses a tunnel header to encapsulate the packets from one typeof protocol in the datagram of a different protocol. For example, VPN(virtual private network) tunnels use PPTP (point-to-point tunnelingprotocol) to encapsulate IP (Internet Protocol) packets over a publicnetwork, such as the Internet. GRE (generic routing encapsulation)tunnels use GRE headers to encapsulate a wide variety of network layerprotocols inside virtual point-to-point links over an IP network. Inother words, a GRE tunnel encapsulates a payload inside an outer IPpacket.

As used in this document, cloud refers to one or more sets of computersin one or more datacenters that are accessible through a network (e.g.,through the Internet). In some embodiments, the XaaS model isimplemented by one or more service providers that operate in the samedatacenter or in different datacenters in different locations (e.g.,different neighborhoods, cities, states, countries, etc.).

Also, as used in this document, a data message refers to a collection ofbits in a particular format sent across a network. One of ordinary skillin the art will recognize that the term data message may be used hereinto refer to various formatted collections of bits that may be sentacross a network, such as Ethernet frames, IP packets, TCP segments, UDPdatagrams, etc. Also, as used in this document, references to L2, L3,L4, and L7 layers are references respectively to the second data linklayer, the third network layer, the fourth transport layer, and theseventh application layer of the OSI (Open System Interconnection) layermodel.

In some embodiments, an inline service switch (ISS) performs loadbalancing operations to distribute data messages among several servicenodes or service node clusters that perform the same service.Alternatively, or conjunctively, a service cluster in some embodimentscan have one or more load balancers that distribute data messagesreceived for the cluster among the service nodes of the service cluster.

In some embodiments, at least one service cluster implements an elasticmodel in which one primary service node receives the cluster's datamessages from the inline service switches. This service node then eitherperforms the service on the data message itself or directs the datamessage (e.g., through L3 and/or L4 network address translation, throughMAC redirect, etc.) to one of the other service nodes (called secondaryservice nodes) in the cluster to perform the service on the datamessage. The primary service node in some embodiments elasticallyshrinks or grows the number of secondary service nodes in the clusterbased on the received data message load.

In some embodiments, an SCN can be a virtual machine (VM) or softwarecontainer (such as a Docker container) that executes on a host alongwith other VMs or containers that serve as SCNs or destination computenodes (DCNs). Examples of DCNs in some embodiments include compute endnodes that generate or consume data messages, or middlebox service nodesthat perform some type of data processing on the data messages as thesemessages are being relayed between the data compute end nodes. Examplesof data compute end nodes include webservers, application servers,database servers, etc., while example of middlebox service nodes includefirewalls, intrusion detection systems, intrusion prevention systems,etc.

A service node is a standalone appliance or is a DCN (e.g., a VM,container, or module) that executes on a host computer. The servicenodes can be data compute end nodes (e.g., webservers, applicationservers, database servers, etc.), or can be middlebox service nodes(e.g., firewalls, intrusion detection systems, intrusion preventionsystems, etc.).

In some embodiments, the inline service switch is another softwaremodule that executes on the same host as the SCN. Two or more of theSCNs on the host use the same inline service switch in some embodiments,while in other embodiments, each SCN on the host has its own inlineservice switch that executes on the host. The host also executes asoftware forwarding element (SFE) in some embodiments. The SFEcommunicatively couples the SCNs of the host to each other and to otherdevices (e.g., other SCNs) outside of the host. In some embodiments, theinline switches are inserted in the egress path of the SCNs before theSFE.

In some embodiments, one or more controllers configure the inlineservice switches by providing the service distribution policies or byproviding distribution rules that are defined based on the servicedistribution policies. One example of these controllers are the ISScontrollers 120 of FIG. 1. This figure illustrates an example of amulti-host system 100 with the inline service switches 105 of someembodiments. This system includes multiple host computing devices 110, aset of ISS controllers 120, a set of one or more VM managing controllers125, and multiple service node clusters 150. As shown in FIG. 1, thehosts 110, the ISS controller set 120, the VM manager set 125, and theservice node clusters 150 communicatively couple through a network 175,which can include a local area network (LAN), a wide area network (WAN)or a network of networks (e.g., Internet).

Each host computing device 110 (e.g., computer) executes one or more VMs115, one or more SFEs 130 (e.g., a software switch, a software router,etc.), an ISS agent 135, and one or more inline service switches 105.The VMs include SCNs and DCNs in some embodiments. In some embodiments,an SFE 130 on a host communicatively couples the VMs of the host to eachother and to devices outside of the host (e.g., to VMs of other hosts).Also, in some embodiments, an SFE of a host implements one or morelogical networks with the SFEs executing on other hosts. The SFE 130also communicatively couples an ISS 105 on the host to one or moreservice nodes or one or more service node clusters 150.

In some embodiments, each ISS 105 is associated with one VM on its host,while in other embodiments, one ISS 105 is associated with more than oneVM on its host (e.g., is associated with all VMs on its host that arepart of one logical network). For the data messages that are sent by itsassociated VM, an ISS 105 enforces one or more service rules thatimplement one or more service policies. Based on the service rules, theISS (1) determines whether a sent data message should be processed byone or more service nodes or clusters, and (2) if so, selects a servicenode or cluster for processing the data message and forwards the datamessage to the selected node or cluster through a tunnel.

Each ISS 105 has a load balancer 160 that it uses to determine how todistribute the load for performing a service to one or more servicenodes or one or more service node clusters that perform this service. Insome embodiments, an ISS 105 connects to a service node or clusterthrough a tunnel. In other embodiments, the inline switches connect tosome service nodes/clusters through tunnels, while not using tunnels toconnect to other service nodes/clusters. In some embodiments, theservice nodes are in different datacenters than the hosts 110 andcontrollers 120 and 125, while in other embodiments one or more of theservice nodes are in the same datacenter as the hosts 110 andcontrollers 120 and 125. In some embodiments, some of the service nodesare service VMs that execute on hosts 110.

Also, in some embodiments, different service node clusters can providethe same service or can provide different services. For instance, in theexample illustrated in FIG. 1, the service node clusters 150 a and 150 bprovide the same service (e.g., firewall service), while the servicenode cluster 150 c provides a difference service (e.g., intrusiondetection). The tunnel-based approach for distributing data messages toservice nodes/clusters in the same datacenter or different datacentersis advantageous for seamlessly implementing a cloud-based XaaS model, inwhich any number of services are provided by service providers in thecloud.

This tunnel-based, XaaS model architecture allows hosts 110 and VMs 115in a private datacenter (e.g., in an enterprise datacenter) toseamlessly use one or more service clusters that are in one or morepublic multi-tenant datacenters in one or more locations. The privatedatacenter typically connects to a public datacenter through a publicnetwork, such as the Internet. Examples of cloud service providersinclude: firewall-service providers, email spam service providers,intrusion detection service providers, data compression serviceproviders, etc. One provider can provide multiple cloud services (e.g.,firewall, intrusion detection, etc.), while another provider can provideonly one service (e.g., data compression).

In some embodiments, the ISS for a VM is deployed in the VM's egressdatapath. For instance, in some embodiments, each VM has a virtualnetwork interface card (VNIC) that connects to a port of the SFE. Insome of these embodiments, the inline switch for a VM is called by theVM's VNIC or by the SFE port to which the VM's VNIC connects. In someembodiments, the VMs execute on top of a hypervisor, which is a softwarelayer that enables the virtualization of the shared hardware resourcesof the host. In some of these embodiments, the hypervisor provides theinline switches that provide the inline switching and load balancingservice to its VMs.

Multiple inline service switches that execute on multiple hosts canimplement a distributed service switch. In a distributed service switch,the data messages from one group of related VMs on multiple differenthosts get distributed to one or more service nodes or clusters accordingto the same service distribution policies. These data messages aredistributed according to the same service distribution policies becausethe individual inline service switches for the SCN group are configuredwith the same policies or rules.

The VM managing controllers 125 provide control and managementfunctionality for defining (e.g., allocating or instantiating) andmanaging one or more VMs on each host. The ISS controller set 120configures the inline switches 105 and their associated load balancers160 through the ISS agent 135. In some embodiments, one of these twocontroller sets 120 and 125 provide control and management functionalityfor defining and managing multiple logical networks that are defined onthe common SFE physical infrastructure of the hosts. The controllers 120and 125 communicate with their agents that execute on the hosts throughout-of-band control channel communication in some embodiments. In someembodiments, controllers 120 and 125 are standalone servers or areservers executing on host machines along with other servers.

In some embodiments, the ISS controller set 120 provides the ISS agentwith high level service policies that the ISS agent converts intoservice rules for the inline switches to implement. These servicepolicies and rules include load balancing policies and rules that theload balancers of the inline switches implement. In some embodiments,the ISS controller set provides the ISS agent with service rules thatthe agent passes along to the inline switches and load balancers. Instill other embodiments, the ISS controller set provides both servicepolicies and service rules to the ISS agent. In these embodiments, theISS agent converts the service policies to service rules, and then itprovides the received and converted service rules to the inline switchesand load balancers. In yet other embodiments, the ISS controller setdirectly configures the inline switches and load balancers without goingthrough an ISS agent.

In some embodiments, the ISS controller set also provides to the ISSagents 135, service switches 105 or their load balancers 160, loadbalancing criteria that the load balancers use to perform their loadbalancing operations. For example, the load balancing criteria includesa set of weight values that specify how the load balancers shoulddistribute the data message load among a set of service nodes in aweighted round robin approach. In some embodiments, the ISS controllerset 120 distributes data-message load statistics and the service agents135, ISS 105 or the load balancers 160 generate load balancing criteriabased on these statistics.

More specifically, in some embodiments, the ISS controller set 120gathers statistics from inline switches and based on the gatheredstatistics, dynamically adjusts the service policies, service rulesand/or load balancing criteria that it distributes directly orindirectly (through the ISS agent) to the inline switches and loadbalancers. In some embodiment, each inline switch stores statisticsregarding its data message distribution in a data storage (called STATstorage below) that it updates on its host. The ISS agent 135periodically gathers the collected statistics from the STAT data storage(not shown in FIG. 1), and relays these statistics to the ISS controllerset 120. In some embodiments, the agent 135 aggregate and/or analyzesome of the statistics before relaying processed statistics to the ISScontroller set 120, while in other embodiments the agents relaycollected raw statistics to the ISS controller set 120.

The ISS controller set 120 of some embodiments aggregates the statisticsthat it receives from the agents of the hosts. In some embodiments, theISS controller set 120 then distributes the aggregated statistics to theagents that execute on the hosts. These agents then analyze theaggregated statistics to generate and/or to adjust rules or criteriathat their associated inline switches or their load balancers enforce.In other embodiments, the controller set analyzes the aggregatedstatistics to generate and/or to adjust service policies, service rulesand/or LB criteria, which the controller set then distributes to theagents 135 of the hosts for their inline switches and load balancers toenforce.

In some of these embodiments, the controller set distributes the samepolicies, rules and/or criteria to each ISS in a group of associatedISS, while in other embodiments, the controller set distributesdifferent policies, rules and/or criteria to different ISS in a group ofassociated ISS. In some embodiments, the controller set distributesupdated policies, rules and/or criteria to some of the inline switchesin an associated group of switches, while not distributing the updatedpolicies, rules and/or criteria to other inline switches in theassociated group. In some embodiments, the controller set updates anddistributes some policies, rules or criteria based on the aggregatedstatistics, while also distributing some or all aggregated statistics tothe hosts so that their agents can generate other rules or criteria. Oneof ordinary skill in the art will realize that in some embodiments thepolicies, rules and/or criteria are not always adjusted based on theaggregated statistics, but rather are modified only when the aggregatedstatistics require such modification.

Irrespective of the implementation for updating the policies, rules,and/or criteria, the collection and aggregation of the data trafficstatistics allows the switching rules or criteria to be dynamicallyadjusted. For instance, when the statistics show one service node asbeing too congested with data traffic, the load balancing rules orcriteria can be adjusted dynamically for the load balancers that senddata messages to this service node, in order to reduce the load on thisservice node while increasing the load on one or more other service nodein the same service node cluster. In some embodiments, the collectionand aggregation of the data traffic statistics also allows thecontroller set 120 to reduce the load on any service node in aservice-node cluster by dynamically directing a service-node managementcontroller set (not shown) to provision new service node(s) or allocatepreviously provisioned service node(s) to the service cluster.

FIG. 2 illustrates a process 200 that an ISS 105 of a VM 115 performsfor a data message sent by the VM. In performing this process, the ISS105 (1) determines whether the data message should be processed by oneor more service nodes or clusters, and (2) if so, selects a service nodeor cluster for processing the data message and forwards the data messageto the selected node or cluster through a tunnel. To select a servicenode or service-node cluster, the ISSS performs a load balancingoperation to ensure that the data message flows that it processes aredistributed among several service nodes or clusters based on a set ofload balancing criteria. The process 200 will be described below byreference to FIGS. 3-5. FIG. 3 different examples of service rulesenforced by the process 200 in some embodiments. FIGS. 4 and 5respectively show an ISS 105 distributing data message flows to servicenodes 305 in one service node cluster 310, and distributing data messageflows to different service-node clusters 405 that perform the sameservice.

The process 200 starts when the ISS 105 receives a data message that itsassociated VM sends. As mentioned above, the ISS 105 is deployed in theVM's egress datapath so that it can intercept the data messages sent byits VM. In some embodiments, the ISS 105 is called by the VM's VNIC orby the SFE port that communicatively connects to the VM's VNIC.

At 210, the process determines whether the data message is part of adata message flow for which the process has processed other datamessages. In some embodiments, the process makes this determination byexamining a connection storage that the ISS maintains to keep track ofthe data message flows that it has recently processed. Two data messagesare part of the same flow when they share the same message headers. Forexample, two packets are part of the same flow when they have the samefive tuples identifier, which includes the source IP address,destination IP address, source port, destination port, and protocol.

As further described below by reference to 255, the connection storagestores one record for each data message flow that the ISS has recentlyprocessed. This record stores a description of the set of service rulesthat have to be applied to the flow's data messages or has a reference(e.g., a pointer) to this description. In some embodiments, when theoperation of the service rule set requires the data message to bedropped, the connection-storage record also specifies this action, orspecifies this action in lieu of the service rule description. Also,when no service has to be performed for data messages of this flow, theconnection-storage record indicates that the ISS should allow thereceived data message to pass along the VM's egress datapath.

In some embodiments, this record stores the flow's identifier (e.g., thefive tuple identifiers). In addition, the connection storage is hashaddressable (e.g., locations in the connection storage are identifiedbased on a hash of the flow's identifier) in some embodiments. When theprocess determines (at 210) that it has previously processed a datamessage from the same flow as the received data message, it transitionsto 215, where it performs the action or service-rule set that waspreviously specified for data messages of this flow in theconnection-storage record for this flow. After performing these serviceoperations, the process 200 provides (at 215) a data message to themodule (e.g., SFE port or VNIC) that called it, assuming that theservice operations do not require the data message to be dropped, inwhich case the process so notifies the calling module. Typically,because of the service operation(s) performed, the data message that theprocess 200 returns to the calling module is a modified version of thedata message received at 205. The modified data message may havedifferent header value and/or datagram (i.e., payload) than the receiveddata message. In some cases, the returned data message might beidentical to the received data message. After 215, the process ends.

When the process determines (at 210) that it has not previouslyprocessed a data message from the same data message flow, the processdetermines (at 220) whether the service rules that it enforces requireone or more service actions to be performed on the received datamessage. In some embodiments, the ISS has a service rule storage thatstores several service rules that the ISS enforces. Each service rulecan be associated with one or more data message flows from the inlineswitch's VM, and different service rule can be associated with differentdata message flows from this VM. In some embodiments, each service rulein the service rule storage has (1) an associated set of data messageidentifiers (e.g., packet header values) and (2) a set of one or moreactions.

The process 200 determines (at 220) whether the received data message'sidentifiers (e.g., five tuples) match the data message identifiers ofany service rule in its service rule storage. When a data messagematches more than one service rule, the process 200 of some embodimentsonly performs the set of actions that is specified by the highestpriority matching service rule. In some such embodiments, the servicerule storage stores the rules according to a sort that is based on theirpriorities so that the process 200 first matches the data message to ahigher priority rule before being able to match it to a lower priorityrule, when more than one rule matches the data message.

When the received data message's header values do not match therule-matching identifier of any service rule that specifies a serviceaction in the service rule storage, the process 200 determines that itdoes not need to forward the data message to any service node to performany service action. Hence, it creates (at 222) a record in theconnection storage to specify that no service action is needed for datamessages that are part of the same flow as the received data message.For some embodiments of the invention, the structure of the connectionstorage was described above and further described below. At 222, theprocess also notifies the module (e.g., SFE port or the VM VNIC) thatcalled it that the process has finished processing the data message. Insome embodiments, this notification is not accompanied by the datamessage, while in other embodiments, this notification is accompanied bythe data message. In sending this notification, the process 200 isallowing the received data message to pass without any service beingperformed on it. After 222, the process ends.

When the received data message's identifiers match the rule-matchingidentifier of one or more service rules in the service rule storage, theprocess performs 225-250 to process the actions of the matching servicerule or rules. In some embodiments, each service rule can specify onlyone action, while in other embodiments, a service rule can specify asequence of one or more actions. A service action in some embodimentsentails forwarding the matching data messages to a service node orcluster. For such an action, the service rule identifies directly, orthrough another record (to which the rule refers), the service nodes ofa cluster or service-node clusters of a group of service clusters forperforming the service. As further described below, the process 200selects one of the identified service nodes or clusters.

FIG. 3 illustrates several examples of service rules specifying serviceactions. This figure illustrates a service rule storage 300 that storesmultiple service rules. Each service rule has an associated service ruleidentifier set 305 that is expressed in terms of one or more datamessage header values (e.g., one or more five tuple values, as describedabove). The process 200 compares the service rule identifier set to adata message's header values in order to determine whether the servicerule matches a received data message.

Each service rule also specifies one or more actions, with each actionbeing specified in terms of an action type 310 (e.g., firewall actiontype, IPS action type, IDS action type, etc.) and a tunnel ID set 315.In some embodiments, the tunnel ID set of each action of a service ruleidentifies (1) one or more tunnels between the ISS and one or moreservice nodes in a cluster, or (2) one or more service clusters in aservice cluster group that provides the service. In some embodiments,the tunnel ID sets of the service rules are supplied as a part of thedata initially supplied by the ISS controller set (e.g., in order toconfigure the ISS) or are supplied in subsequent updates that isprovided by the controller set.

When a service rule specifies more than one action, the actions can beassociated with more than one service. In this manner, a service rulecan specify a sequence of service operations that need to be performedon a matching data message. As mentions above, some embodiments storethe service rules in the data storage 300 according to a sort that isbased on the rule priorities, because the process 200 in theseembodiments matches a data message to only one service rule, and thesorted order allows the process to match a data message to a matchinghigher priority rule instead of lower priority matching rule.

In the example illustrated in FIG. 3, service rule 350 has oneassociated action, while service rule 355 has multiple associatedactions. In other embodiments, each service rule can only specify oneservice action. Also, in other embodiments, the service rule does notdirectly identify the tunnel ID for the service node or cluster. Forinstance, in some embodiments, the process 200 identifies the tunnel IDby using a service-node identifier or service-cluster identifier toretrieve the tunnel ID from a table that identifies these IDs.

At 225, the process selects a service action of a service rule thatmatches the received data message header value. When a matching servicerule specifies a sequence of two or more service actions, the process200 maintains a record (e.g., a count) that identifies where it is inthe sequence of actions that it has to perform so that when it returnsto 225 it will know which is the next service action that it has toselect in the sequence. This will be further described below.

In some embodiments, this service action has an associated tunnel ID set315 that specifies one or more tunnels of one or more service nodes orservice node clusters that perform the service action. Accordingly, at230, the process 200 uses the load balancer of the ISS to select for thedata message in a load-balance way, one service node or one service nodecluster from the set of service nodes or service-node clusters that areidentified by the tunnel ID set. In some embodiments, the ISS loadbalancer distributes the load in a stateful manner so that data messagesthat are part of the same flow are processed by the same service node orthe same service node cluster.

To select service nodes or service-node clusters in a load-balancemanner, each service rule in some embodiments specifies a set of weightvalues (not shown) for each of the rule's specified tunnel ID set.Alternatively, in other embodiments, each service rule refers to anotherrecord that identifies the weight value set for each tunnel ID setidentified for the rule. Each weight value set specifies a weight valuefor each tunnel ID in the associated tunnel ID set, and provides theload-balancing criteria for the ISS load balancer to spread the trafficto the service nodes or clusters that are identified by the tunnel IDset.

For instance, in some embodiments, the ISS load balancer uses theseweight values to implement a weighted round robin scheme to spread thetraffic to the nodes or clusters. As one example, assume that the tunnelID set has five tunnel IDs and the weight values for the tunnel IDs are1, 3, 1, 3, and 2. Based on these values, the ISS load balancer woulddistribute data messages that are part of ten new flows as follows: 1 tothe first tunnel ID, 3 to the second tunnel ID, 1 to the third tunnelID, 3 to the fourth tunnel ID, and 2 to the fifth tunnel ID. As furtherdescribed below, the weight values for a service rule are generated andadjusted by the ISS agent 135 and/or ISS controller set 120 in someembodiments based on the statistics that the controller set collectsfrom the inline switches. To gracefully switch between different loadbalancing criteria, a tunnel ID set can have multiple weight value setsand the service rule in some embodiments can specify different timeperiods during which different weight values (i.e., different loadbalancing criteria) of the tunnel ID set are valid.

After selecting (230) a service node or service-node cluster for thedata message, the process (at 235) identifies a tunnel key, encapsulatesthe data message with a tunnel header (that includes the identifiedtunnel key) for the tunnel to the selected service node or service-nodecluster, and provides this tunnel-header encapsulated data message toits host's SFE for forwarding to the selected service node orservice-node cluster. Examples of such tunnels and keys are GRE tunnels,Geneve tunnels, GRE keys, Geneve keys, etc. As further described below,the inline switches of some embodiments also use other redirectionmechanisms (such as MAC redirect, destination network addresstranslation, etc.) to forward data messages to some of the service nodesand service-node clusters.

Tunnel keys (e.g., GRE keys) allow multiple data message flows to sharethe same tunnel. For each data message flow, the process in someembodiments uses one GRE key to send the flow's data messages to servicenode or cluster at the other end of the tunnel and to receive responsivedata messages in response to the sent data messages from this node orcluster. For data messages from the service node or cluster, the tunnelkey also allows the process 200 to associate the data message to thedata message that the process sent to the service node or cluster.

FIG. 4 presents an example that shows the inline service switches 105,of several related VMs 115 executing on the same host or on differenthosts, using several tunnels 450 to distribute their VM data messages toseveral service nodes 405 of a service node cluster 410 that perform thesame service (e.g., a firewall service or an IPS service) on thesemessages. An ISS performs a load balancing operation to select theservice node for each data message flow.

In FIG. 4, each tunnel is established between an ISS 105 and a servicenode 405 in the cluster. For data messages of different flows that sharethe same tunnel to the same service node, an ISS 105 uses differenttunnel keys so that different flows can share the same tunnel. Also,through each service-node tunnel, the ISS receives data messages inresponse to the data messages that it sends to the service node, anduses the tunnel keys to associate each responsive data message with adata message that it sent.

In some embodiments, each service node 405 is a standalone appliance. Inother embodiments, one or more service nodes 405 are servers executingon a host computer. For such service nodes, the tunnels 405 in someembodiments are tunnels that are provisioned for the host computer, orfor an SFE of the host computer, on which the service node executes. Onthe inline-switch side, the tunnel can also be provisioned at the hostlevel in some embodiments. In other words, in some embodiments, two ormore inline switches 105 that execute on the same host computer uses thesame tunnel to a service node.

FIG. 5 presents an example that shows the inline service switches 105,of several related VMs 115 executing on the same host or on differenthosts, using several tunnels 550 to distribute their VM data messages toseveral service-node clusters 505 that perform the same service (e.g., afirewall service or an IPS service) on these messages. In this example,an ISS performs a load balancing operation to select the service clusterfor each data message flow. As in the example of FIG. 4, differenttunnel keys are used to identify data messages of different flows thatshare the same tunnel in the example of FIG. 5.

In the example illustrated in FIG. 5, each service cluster 505 hasmultiple service nodes 510 that perform the same service, and aload-balancing webserver set 515 (with one or more webservers) thatdistributes the received data messages to the service nodes of itscluster. In this example, each tunnel is established between the ISS 105and a load-balancing webserver 515 of the cluster. Through its loadbalancing operation 230, the ISS selects one cluster in the group ofclusters of FIG. 5, in order to distribute the service load to thedifferent clusters that perform the same service. The load-balancingwebservers 515 of each cluster then have the task of distributing eachcluster's load among the cluster's service nodes. In some embodiments,these webservers distribute the load in a stateful manner so that thesame service node in the cluster processes data messages that are partof the same flow.

In some embodiments, the different service clusters of a service clustergroup illustrated in FIG. 5 are in different datacenters at differentlocations. Having different service clusters in different locations thatperform the same service can be advantageous in that it allows differentISS in different locations to bias their service cluster selection toservice clusters that are closer to the ISS location. Also, havingdifferent service clusters perform the same service action also providesdifferent tenants in a datacenter the ability to pick different serviceproviders for the same service and to easily switch between theseproviders without the need to reconfigure the inline switches or theirservers (e.g., their VMs or containers). In other embodiments, one ormore of these service clusters 505 are in the same datacenter. Suchservice clusters might be created when different service providersprovide the same service in one datacenter.

Also, the architecture illustrated in FIG. 5 is also used in someembodiments to terminate tunnels on non-service node elements (e.g., onload balancers such as load balancers 515) that distribute data messagesthat they receive from the inline switches 105 to one or more servicenodes that perform the same service or different services. In one suchapproach, service nodes 515 of one service provider can be in differentclusters 505. Also, in such an approach, each service cluster can havejust one service node. In view of the foregoing, one of ordinary skillwill realize that the tunnel that an inline switch uses to forward datamessage to a service node does not necessarily have to terminate (i.e.,does not have to be provisioned) at the service node, but can terminateat a machine or appliance that forwards the data messages it receivesthrough the tunnel to the service node.

A time period after sending (at 235) the data message to the servicenode or cluster, the process receives (at 240) a service completionconfirmation from the service node or cluster through the tunnel thatwas used to send the data message at 235. The confirmation is part ofone or more data messages that are received from the service node orcluster and that are encapsulated with the tunnel header with the tunnelkey. The tunnel key allows the process 200 to associate the receiveddata message(s) with the sent data message (i.e., the data message sentat 235).

The received confirmation might indicate that the data message should bedropped (e.g., when the service node performs a security serviceoperation (e.g., firewall, IPS, IDS, etc.) that determines that the datamessage should be dropped). Alternatively, the confirmation datamessage(s) might return a data message with one or more modified datamessage header. These modified header values may re-direct the datamessage to a different destination once the process 200 completes itsprocessing of the data message.

Also, the confirmation data message(s) in some embodiments might returna new or modified payload to replace the payload of the data messagethat was sent at 235 to the service node or cluster. For instance, whenthe service node or cluster performs an encryption or compressionoperation, the new payload might be the encrypted or compressed versionof the payload of the sent data message. When the returned datamessage(s) provide a new or modified payload for the sent data message,the process 200 replaces the sent data message payload with the receivednew or modified payload before having another service node or clusterperform another service on the data message, or before having the SFEforward the data message to its eventual destination.

After receiving (at 240) the service completion confirmation, theprocess 200 determines (at 245) whether it should continue processingthe data message. When the received confirmation indicates that the datamessage should be dropped, the process 200 transitions to 255, where itcreates a record in the ISS connection storage to specify that datamessages that are part of the same flow (as the data message received at205) should be dropped. This record is created so that for subsequentdata messages that are part of the same flow, the process does not haveto search the service rule data storage and to perform the serviceactions before it determines that it should drop the data message. At255, the process 200 also updates the statistics that it maintains inthe ISS STAT storage to reflect the current data message's processing bythe service node or nodes that processed this data message before it wasdropped.

Alternatively, when the process determines (at 245) that it shouldcontinue processing the data message, it determines (at 250) whether itsservice rule check at 220 identified any other service actions that ithas to perform the current data message. As mentioned above, the processin some embodiments can identify multiple matching service rules withmultiple service actions that have to be performed on the data message.In other embodiments, the process can only identify one matching servicerule to the data message. However, in some embodiments, a matchingservice rule might specify multiple service actions that have to beperformed on a data message.

Accordingly, when the process determines (at 250) that it needs toperform another service action on the data message, it returns to 225 toselect another service action and to repeat operations 230-250. When amatching service rule specifies a sequence of two or more serviceactions, the process 200 maintains a record (e.g., a count) thatidentifies where it is in the sequence of actions that it has to performso that when it returns to 225 it will know which is the next serviceaction that it has to select in the sequence. In other words, thisrecord maintains the state where the process is in the service policychain that it has to implement for a received data message.

FIG. 6 illustrates an example of an ISS sequentially calling multipledifferent service nodes of different clusters that perform differentservices in order to implement a complex service policy that involvesmultiple different individual service policies. This figure illustratesan ISS 105 of a VM 115 sequentially using X service nodes 605 of Xdifferent service clusters 610 to perform a complex service policy thatinvolves X individual service action, where X is an integer. As shown,the ISS uses different tunnels 650 to send data messages to the Xservice nodes. FIG. 6 shows the tunnels that are used to process thedata message in terms of solid lines, while showing other candidatetunnels that the ISS 105 does not select in terms of dashed lines. Theuse of the tunnels allows some or all of the clusters to be in thecloud. In other words, the tunnels allow the ISS to seamlessly implementa cloud-based XaaS model.

In some embodiments, the different service clusters 610 can be locatedin the same datacenter with each other, or in different datacenters.Also, a service cluster 610 can be located in the same datacenter as theVM 115 and ISS 105, or it can be in a different datacenter. The VM 115is in a private datacenter (e.g., in an enterprise datacenter) while theone or more service clusters are in a public multi-tenant datacenter ina different location. As mentioned above, the tunnel-based approach fordistributing data messages to service nodes/clusters in the samedatacenter or different datacenters is advantageous for seamlesslyimplementing a cloud-based XaaS model, in which any number of servicesare provided by service providers in the cloud.

In some embodiments, when an inline switch 105 sequentially callsmultiple service nodes or clusters to perform multiple service actionsfor a data message that the switch has received, the inline switch sendsa data message to each service node or cluster that is identical to thedata message that the inline service switch initially receives when theprocess 200 starts, or identical to the data message that the inlineservice switch receives from a previous service node that performed aprevious service action on a data message that the inline service switchsent to the previous service node. In other words, in these embodiments,the inline switch just relays in the tunnels that connect it to theservice nodes or clusters, the data messages that it receives (at 205)at the start of the process 200 and receives (at 240) from the servicenodes. In these situations, the inline switch just places a tunnelpacket header on the data message that it receives before forwarding itto the next service action node.

In performing its service action on a received data message, one servicenode might modify the data message's header value and/or its datagrambefore sending back the modified data message. Notwithstanding thismodification, the discussion in this document refers to all the datamessages that are received by the inline switch during the execution ofthe process 200 (i.e., while this switch is directing the servicenode(s) or cluster(s) to perform a desired sequence of serviceoperations that are initiated when the first data message is received at205 to start the process 200) as the received data message. One ofordinary skill will realize that after each service operation, the datamessage can be modified so that the resulting message is not similar(e.g., has a different header value or different datagram) to themessage on which the operation was perform.

Also, one of ordinary skill will realize that in some embodiments theinline switch might just send a portion of a received data message tothe service node. For instance, in some embodiments, the inline switchmight send only the header of a data message, a portion of this header,the payload of the data message, or a portion of the payload.Analogously, the service nodes in some embodiments do not send back adata message that is a modified version of a data message that theyreceive, but instead send back a value (e.g., Allow, Drop, etc.).

When the process determines (at 250) that it has performed all serviceactions that it identified for the data message received at 205, theprocess creates (at 255) a record in the ISS connection storage tospecify the service action or service-action sequence that should beperformed for data messages that are part of the same flow (as the datamessage received at 205). This record is created so that for subsequentdata messages that are part of the same flow, the process does not haveto search the service rule data storage. Instead, at 210, the processcan identify for these subsequent data messages the service action(s)that it has to perform from the record in the connection storage, and itcan perform these actions at 215. For each service action that theprocess 200 identifies in the connection storage, the process alsoidentifies, in the connection storage record, the identified servicenode or cluster (i.e., the node or cluster identified at 225) that hasto perform the service action, so that all the data messages of the sameflow are processed by the same service node or cluster for that serviceaction.

At 255, the process 200 also updates the statistics that it maintains inthe ISS STAT storage to reflect the current data message's processing bythe service node or nodes that processed this data message. Afterperforming the service operations, the process 200 provides (at 255) adata message to the module (e.g., SFE port or VNIC) that called it,assuming that the service operations do not require the data message tobe dropped, in which case the process so notifies the calling module.Again, because of the service operation(s) performed, the data messagethat the process 200 returns to the calling module is typically amodified version of the data message received at 205 (e.g., has one ormore different header value and/or a modified payload), but in somecases, the returned data message might be identical to the received datamessage. After 255, the process ends.

In several examples described above by reference to FIGS. 2-6, theinline switch selects in a load-balanced manner a service node orcluster for processing a data message, and then sends the data messageto the selected node or cluster through a tunnel. In other embodiments,the inline switch does not select a service node from several servicenodes, nor does it select a service cluster from several serviceclusters. For instance, in some embodiments, the inline switch simplyrelays a data message along one tunnel to a service cluster so that aload-balancing node at the service cluster can then select a servicenode of the cluster to perform the service.

In some of these embodiments, at least one service cluster implements anelastic model in which one primary service node receives the cluster'sdata messages from the inline service switches. This service node theneither performs the service on the data message itself or directs thedata message (e.g., through L3 and/or L4 network address translation,through MAC redirect, etc.) to one of the other service nodes (calledsecondary service nodes) in the cluster to perform the service on thedata message. The primary service node in some embodiments elasticallyshrinks or grows the number of secondary service nodes in the clusterbased on the received data message load.

FIG. 7 illustrates an example of such an elastic service model that usesone primary service node and zero or more secondary service nodes. Thisexample is illustrated in three stages 705-715 that illustrate theoperation of a service node cluster 700 at three different instances intime. The first stage 705 illustrates that at a time T1, the clusterincludes just one primary service node (PSN) 720. As shown, the PSN 720has a load balancer (LB) and a service virtual machine (SVM).

In the first stage 705, the PSN receives all data messages on which thecluster has to perform its service. These messages are sent by an inlineswitch 105 captures and sends from its VM to the cluster 700 through atunnel 750. In the first stage 705, the PSN's SVM 730 performs theneeded service on these messages, and then directs these messages backto the inline switch 105 through the tunnel 750.

The second stage 710 illustrates that a time T2, the cluster has beenexpanded to include another service node, SSN1, which is implemented bya second service virtual machine. In some embodiments, the service nodeSSN1 is added to the cluster because the data message load on thecluster has exceeded a first threshold value. In some embodiments, aservice-node controller set (not shown) adds SSN1 when it detects thatthe data message load has exceeded the first threshold value, or whenthe PSN detects this condition and directs the controller set to addSSN1. In some embodiments, the service-node controller set obtains thedata message load from the PSN.

To assess whether the data message load exceeds a threshold value, thecontroller set or PSN in different embodiments quantify the data messageload based on different metrics. In some embodiments, these metricsinclude one or more of the following parameters: (1) number of flowsbeing processed by the cluster or by individual service nodes in thecluster, (2) number of packets being processed by the cluster or byindividual service nodes in the cluster, (3) amount of packet data beingprocessed by the cluster or by individual service nodes in the group.

The second stage 710 also illustrates that at time T2 the PSN performsthe cluster's service on some of the data message flows, while directingother data message flows to SSN1 so that this service node can performthis service on these other flows. Once either the PSN or SSN1 performsthe service on a data message, the PSN directs the data message to theISS 105. As shown, once the SSN1 performs the services, this servicenode in some embodiments returns the data message to the PSN, whichdirects it back to the ISS. In other embodiments, the SSNs return theprocessed data messages directly to the inline switch. In some of theseembodiments, the SSNs and the inline switches are configured to insertthe appropriate packet header values and to examine the appropriatepacket header values to identify data messages that have been processedby the SSNs. In still other embodiments, the SSNs establish tunnels withthe inline switches (e.g., with the hosts of the inline switches) oncethe SSNs are provisioned so that they can return their processedmessages directly to the inline switches.

The load balancer 725 of the PSN performs a load balancing operationthat selects which service node (primary or secondary) in the clustershould perform the group's service on each data message that the PSNreceives. In some embodiments, the load balancer 725 distributes thedata messages based on a hash of the different tunnel keys that the ISS105 uses to send different data-message flows through the tunnel 750.This hashing ensures that the data messages that are part of the sameflows are processed by the same service node in the cluster. The loadbalancing is also based on some of the inner packet header values insome embodiments. In other embodiments, the load balancing is just basedon the inner packet header values (i.e., it is not based on the tunnelkeys). In some embodiment, the load balancer 725 stores in a connectionstorage a record of each service node selection for each data-messageflow, and uses this record to forego re-assessing selection of a servicenode for a flow after picking a service node for the first data messagein the flow. In some embodiments, the load balancer of the PSN alsodetermines when service nodes should be added to or removed from thecluster.

The third stage 715 illustrates that a time T3, the cluster has beenexpanded to include yet another service node, SSN2, which is a thirdservice virtual machine. In some embodiments, the service node SSN2 isadded to the cluster because the data message load on the cluster hasexceeded a second threshold value, which is the same as the firstthreshold value in some embodiments or is different than the firstthreshold value in other embodiments. Some embodiments add the servicenode SSN2 when the load on either PSN or SSN1 exceed a second thresholdamount. Other embodiments add a new service node when the load on N(e.g., two or three) service nodes exceeds a threshold value. As before,the service-node controller set in some embodiments adds SSN2 when it orthe PSN detects that the data message load has exceeded the secondthreshold value.

The third stage 715 also illustrates that time T3, the PSN performs thecluster's service on some of the data message flows, while directingother data message flows to SSN1 or SSN2, so that these service nodescan perform this service on these other flows. As shown, once any of theservice nodes, PSN, SSN1, or SSN2, performs the service on a datamessage, the PSN returns the data message to the ISS 105 through thetunnel 750. After processing the data message, SSN2, like SSN1, providesits reply data message to the PSN so that the PSN can forward thismessage to the ISS 105 through the tunnel 750.

FIG. 8 illustrates an example where the ISS 105 of a VM 115 sequentiallyforwards a data message from the VM to different clusters of elasticallyadjusted service-node clusters. In this example, different serviceclusters perform different service operations on the data message. Insome embodiments, SSNs of one cluster can be PSNs of other clusters,when the multiple clusters reside in the same location.

The ISS 105 connects to the PSN of each service cluster through atunnel, which allows each service cluster to reside outside of the ISS'local area network. By sequentially relaying the data message todifferent service clusters, the ISS 105 can implement a complex servicepolicy with multiple service actions (X in this example) on the datamessage. The use of the tunnels allows some or all of the clusters to bein the cloud. In other words, the tunnels allow the ISS to seamlesslyimplement a cloud-based XaaS model.

FIG. 9 illustrates a process 900 that the ISS 105 performs in someembodiments to process data messages with one or more elasticallyadjusted service node clusters. This process is identical to the process200 of FIG. 2 except that process 900 does not perform theload-balancing operation 230 to select a service node in the cluster. Asshown, after identifying (at 225) a service action that is to beperformed by a service node of a service cluster, the process 900 justforwards (at 235) the data message to the service cluster along thetunnel that connects the ISS to the service cluster.

FIG. 10 conceptually illustrates a process 1000 that such a PSN performswhenever the PSN receives a data message in some embodiments. Theprocess 1000 identifies one service node in the PSN's SN group thatshould process the received data message, and then directs theidentified service node to perform the SN group's service for thereceived data message. The identified service node can be the PSNitself, or it can be an SSN in the SN group.

As shown in FIG. 10, the process 1000 starts (at 1005) when the PSNreceives a data message through a tunnel from an ISS filter. Afterreceiving the data message, the process determines (at 1010) whether thereceived message is part of a particular data message flow for which thePSN has previously processed at least one data message.

To make this determination, the process examines (at 1010) aconnection-state data storage that stores (1) the identity of each ofseveral data message flows that the PSN previously processed, and (2)the identity of the service node that the PSN previously identified asthe service node for processing the data messages of each identifiedflow. In some embodiments, the process identifies each flow in theconnection-state data storage in terms of one or more flow attributes,e.g., the flow's five tuple identifier. Also, in some embodiments, theconnection-state data storage is hash indexed based on the hash of theflow attributes (e.g., of the flow's five tuple header values). For sucha storage, the PSN generates a hash value from the header parameter setof a data message, and then uses this hash value to identify one or morelocations in the storage to examine for a matching header parameter set(i.e., for a matching data message flow attribute set).

When the process identifies (at 1010) an entry in the flowconnection-state data storage that matches the received data messageflow's attributes (i.e., when the process determines that it previouslyprocessed another data message that is part of the same flow as thereceived data message), the process directs (at 1015) the received datamessage to the service node (in the SN group) that is identified in thematching entry of the connection-state data storage (i.e., to theservice node that the PSN previously identified for processing the datamessages of the particular data message flow). This service node thenperforms the service on the data message. This service node can be thePSN itself, or it can be an SSN in the SN group. After performing (at1015) the service on the data message, the SN returns a reply datamessage (e.g., the processed data message) to the ISS filter that calledit, and then ends.

On the other hand, when the process determines (at 1010) that theconnection-state data storage does not store an entry for the receiveddata message (i.e., determines that it previously did not processanother data message that is part of the same flow as the received datamessage), the process transitions to 1020. In some embodiments, theconnection-state data storage periodically removes old entries that havenot matched any received data messages in a given duration of time.Accordingly, in some embodiments, when the process determines (at 1010)that the connection-state data storage does not store an entry for thereceived data message, the process may have previously identified aservice node for the data message's flow, but the matching entry mighthave been removed from the connection-state data storage.

At 1020, the process determines whether the received data message shouldbe processed locally by the PSN, or remotely by another service node ofthe SN group. To make this determination, the PSN in some embodimentsperforms a load balancing operation that identifies the service node forthe received data message flow based, based on the load balancingparameter set that the PSN maintains for the SN group at the time thatthe data message is received. The load balancing parameter set isadjusted in some embodiments (1) based on updated statistic dataregarding the traffic load on each service node in the SN group, and (2)based on service nodes that are added to or removed from the SN group.

The process 1000 performs different load balancing operations (at 1020)in different embodiments. In some embodiments, the load balancingoperation relies on L2 parameters of the data message flows (e.g.,generates hash values form the L2 parameters, such as source MACaddresses, to identify hash ranges that specify service nodes for thegenerated hash values) to distribute the data messages to service nodes,while in other embodiments, the load balancing operations relies onL3/L4 parameters of the flows (e.g., generates hash values form theL3/L4 parameters, such as five tuple header values, to identify hashranges that specify service nodes for the generated hash values) todistribute the data messages to service nodes. In yet other embodiments,the load balancing operations (at 1020) use different techniques (e.g.,round robin techniques) to distribute the load amongst the servicenodes.

When the process determines (at 1020) that the PSN should process thereceived data message, the process directs (at 1025) a service module ofthe PSN to perform the SN group's service on the received data message.At 1025, the process 1000 also creates an entry in the flowconnection-state data storage to identify the PSN as the service nodefor processing data messages that are part of the same flow as thereceived data message. In some embodiments, this entry identifies thePSN and identifies the received data message header values (e.g., fivetuple values) that specify the message's flow. After performing (at1025) the service on the data message, the PSN returns a reply datamessage (e.g., the processed data message) to the ISS filter that calledit, and then ends.

When the process determines (at 1020) that based on its load balancingparameter set, the PSN should not process the received data message, theprocess identifies (at 1020) another service node in the PSN's SN groupto perform the service on the data message. Thus, in this situation, theprocess directs (at 1030) the message to another service node in thePSN's SN group. To redirect the data messages, the PSN in differentembodiments uses different techniques, such as MAC redirect (for L2forwarding), IP destination network address translation (for L3forwarding), port address translation (for L4 forwarding), L2/L3tunneling, etc.

To perform MAC redirect, the process 1000 in some embodiments changesthe MAC address to a MAC address of the service node that it identifiesat 1020. For instance, in some embodiments, the process changes the MACaddress to a MAC address of another SFE port in a port group thatcontains the SFE port connected with the PSN. More specifically, in someembodiments, the service nodes (e.g., SVMs) of a SN group are assignedports of one port group that can be specified on the same host ordifferent hosts. In some such embodiments, when the PSN wants toredirect the data message to another service node, it replaces the MACaddress of the PSN's port in the data message with the MAC address ofthe port of the other service node, and then provides this data messageto the SFE so that the SFE can forward it directly or indirectly(through other intervening forwarding elements) to the port of the otherservice node.

Similarly, to redirect the data message to the other service nodethrough IP destination network address translation (DNAT), the PSNreplaces the destination IP address in the data message to thedestination IP address of the other service node, and then provides thisdata message to the SFE so that the SFE can forward it directly orindirectly (through other intervening forwarding elements) to the otherservice node.

To redirect the data message to the other service node through portaddress translation, the PSN replaces the destination port address inthe data message to the destination port address of the other servicenode, and then uses this new port address to direct the data message tothe other service node. In some embodiments, the PSN's network addresstranslation may include changes to two or more of the MAC address, IPaddress, and port address.

After directing (at 1030) the data message to the other service node,the process creates (at 1035) an entry in the connection-state datastorage to identify the other service node as the service node forprocessing data messages that are part of the same flow as the receiveddata message. In some embodiments, this entry identifies (1) the otherservice node and (2) the received data message header values (e.g., fivetuple values) that specify the message's flow. After performing theservice on the data message, the SSN returns a reply data message (e.g.,the processed data message) to the ISS filter that called it, and thenends. In some embodiments, the SSN returns the reply data messagedirectly to the ISS filter, while in other embodiments, the SSN returnsthis reply data message to the ISS filter through the PSN.

The inline service switch of some embodiments statefully distributes theservice load to a number of service nodes based on one or more L4+parameters. Examples of L4+ parameters include session keys, sessioncookies (e.g., SSL session identifiers), file names, database serverattributes (e.g., user name), etc. To statefully distribute the serviceload among server nodes, the inline service switch in some embodimentsestablishes layer 4 connection sessions (e.g., a TCP/IP sessions) withthe data-message SCNs and the service nodes, so that the switch (1) canexamine one or more of the initial payload packets that are exchangedfor a session, and (2) can extract and store the L4+ session parametersfor later use in its subsequent load balancing operation of a session.

FIG. 11 illustrates an example of a multi-host system 1100 of someembodiments with the inline service switches 1105 that statefullydistributes the service load to a number of service nodes based on oneor more L4+ parameters. The system 1100 is identical to the system 100of FIG. 1, except that its inline service switches 1105 of the hosts1110 establish layer 4 connection sessions (e.g., a TCP/IP sessions)with their associated VMs and with the service nodes.

Through the layer 4 sessions with its VM and a service node that itselects, an ISS 1105 (1) can examine one or more of the initial payloadpackets that are exchanged for a session, and (2) can extract and storethe L4+ session parameters for later use in its subsequent loadbalancing operation for its VM. After establishing the L4 sessions withits VM and the service node, the ISS filter (1) receives a data packetfrom a session end point (i.e., from the VM or the service node), (2)extracts the old packet header, (3) examines the packet payload (i.e.,the datagram after the L3 and L4 packet header values) to identify anyL4+ session parameter that it needs to extract, (4) extracts any neededL4+ session parameter if one such parameter is found, (5) stores anyextracted session parameter (e.g., in the connection storage 1190 on itshost 1110), and (6) re-encapsulated the payload with a new packet headerbefore relaying the packet to the other session's end point (i.e., tothe service node or the VM). In some embodiments, the new and old packetheaders are similar except for specifying different TCP sequence numbersas further described below.

FIG. 12 illustrates an ISS 1105 extracting and re-using a sessionparameter by establishing an L4 connection session with its VM and aservice node 1205 of a service cluster 1250. In this example, theservice cluster 1250 includes several servers (service nodes) thatperform a service (e.g., provide access to secure content) through SSL(secure sockets layer) sessions. Also, in this example, the extractedand re-used session parameters are SSL session cookies.

FIG. 12 presents a messaging diagram that illustrates how the ISS 1105relays two different sets 1230 and 1235 of SSL packets from itsassociated VM to a service node 1205. As shown, in both the messagingflows, the ISS 1105 first establishes a TCP session with the VM byperforming a 3-way TCP handshake. After establishing the first TCPsession with its VM (for the first set of SSL packets 1230), the ISS1105 examines an initial set of one or more packets that its VM 115sends and determines that the VM is requesting an SSL service session.The ISS 1105 then determines that the requested SSL service session is anew one as this request is not accompanied by an SSL session cookie.

Hence, the ISS 1105 determines that it has to select a service node forthe requested SSL session from the service cluster 1250, and that it hasto monitor the packets exchanged between the VM and this service node sothat it can record the SSL session cookie for this session. In someembodiments, the ISS 1105 selects the service node 1205 in the clusterbased on a set of load balancing criteria that it considers for theservice cluster 1250.

After selecting the service node 1205, the ISS 1105 performs a 3-way TCPhandshake with the service node 1205 in order to establish an L4connection session with the service node 1205. Once this session isestablished, the ISS 1105 starts to relay the packets that it receivesfrom its VM 115 to the service node 1205, and to relay the packets thatit receives from the service node 1205 to its VM 115. In relaying thedata packets between the VM 115 and the service node 1205, ISS 1105 insome embodiments can adjust the sequence numbers of the relayed datamessages to address differences in sequence numbers between the VM andthe service node. In some embodiments, the ISS 1105 sends packets to andreceives packets from the service node 1205 through a tunnel.

In relaying one or more responsive packets from the service node 1205 tothe VM 115, the ISS 1105 identifies in an initial set of packet an SSLsession ID that is generated by the service node 1205. This session IDis often referred to as SSL session ID or cookie. After the SSL sessionID is created, an SSL session key is generated, e.g., by the VM based onan SSL certificate of the service node. Generation of an SSL session keyis computational intensive.

As the ISS 1105 has established an L4 connection with the service node1205, it can extract the SSL session cookie from the initial set of oneor more packets that the service node 1205 sends. As shown, the ISS 1105stores the SSL session cookie in the connection storage 1190. In someembodiments, the connection storage record that stores this SSL sessioncookie also includes the identity of the service node 1205 as theservice node that generated this cookie. In some embodiments, thisrecord also includes one or more packet header attributes of the currentflow (such as source IP, destination IP, destination port, and protocolof the current flow).

In the example illustrated in FIG. 12, the VM stops communicating withthe service node for a time period. It then resumes this communicationby sending a second set of data packets. Because the VM wants tocontinue using the same SSL session as before, the VM sends the SSLsession cookie that it obtained previously. However, in such situations,it is not unusual for the VM to use a different source port for thesenew data packet. Because of the different source port, the ISS 1105initially assumes that the new data packets are for a new flow.

Hence, the ISS 1105 establishes another TCP session with the VM byperforming another 3-way TCP handshake. After establishing this secondTCP session with its VM, the ISS 1105 examines an initial set of one ormore packets sent by its VM 115 and determines this set of packetsincludes an SSL session cookie. As shown, the ISS 1105 extracts thiscookie, compares it with the cookies in its connection storage 1190,identifies the record that stores this cookie (i.e., determines that ithas previously stored this cookie) and from this record, identifiesservice node 1205 as the service node for processing the SSL sessionassociated with this request.

The ISS 1105 then performs another 3-way TCP handshake with the servicenode 1205 in order to establish another L4 connection session with theservice node 1205 because it has determined that this service node isthe node that should process the request SSL session. Once this sessionis established, the ISS 1105 starts to relay packets back and forthbetween its VM 115 and the service node 1205. By extracting and storingthe SSL session cookie when the SSL session was initially established,the ISS 1105 can properly route subsequent data packets from its VM 115that include this session's cookie to the same service node 1205. Thisis highly beneficial in that it allows the SSL session to quicklyresume, and saves the computational resources from having to generateanother session key.

As mentioned above, the inline service switches of some embodiments canextract and store different L4+ session parameters for later use infacilitating efficient distribution of service requests from VMs toservice nodes in service-node clusters. Other examples include sessionkeys, file names, database server attributes (e.g., user name), etc.FIG. 13 illustrates an example of a file name as the extracted L4+session parameter. The file name is the name of a piece of content(e.g., image, video, etc.) that is requested by a VM 115 and that isprovided by the servers of a service cluster 1350.

In the example of FIG. 13, the VM's ISS 1105 stores the requested filename as part of a first set of content processing messages 1330. As partof these messages, the ISS (1) performs an initial TCP 3-way handshake,(2) receives the VM's initial request, and (3) extracts the file namefrom the request. In some embodiments, the VM's initial request is inthe form of a URL (uniform resource locator), and the ISS 1105 extractsthe file name from this URL. The URL often contains the name or acronymof the type of content being requested (e.g., contain .mov, .img, .jpg,or other similar designations that are postscripts that identify thename requested content). The ISS in some embodiments stores theextracted file name in its connection storage 1190 in a record thatidentifies the service node 1305 that it selects to process thisrequest. From the servers of the cluster 1350, the ISS identifies theservice node 1305 by performing a load balancing operation based on aset of load balancing criteria that it processes for content requeststhat it distributes to the cluster 1350.

Next, the ISS 1105 performs a 3-way TCP handshake with the service node1305 in order to establish an L4 connection session with the servicenode 1305. Once this session is established, the ISS 1105 relays thecontent request to the service node 1305. In relaying this request tothe service node 1305, ISS 1105 in some embodiments can adjust thesequence numbers of the relayed data packets to address differences insequence numbers between the VM and the service node 1305. In someembodiments, the ISS 1105 sends packets to and receives packets from theservice node 1305 through a tunnel.

The ISS 1105 then receives one or more responsive packets from theservice node 1305 and relays these packets to the VM 115. This set ofpackets includes the requested content piece. In some embodiments, theISS 1105 creates the record in the connection storage 1190 to identifythe service node 1305 as the server that retrieved the requested contentpiece only after receiving the responsive packets from this server.

In some embodiments, the service node 1305 directly sends its replypackets to the VM 115. In some of these embodiments, the ISS 1105provides a TCP sequence number offset to the service node, so that thisnode can use this offset in adjusting its TCP sequence numbers that ituses in its reply packets that respond to packets from the VM 115. Insome embodiments, the ISS 1105 provides the TCP sequence number offsetin the encapsulating tunnel packet header of a tunnel that is used torelay packets from the ISS to the service node 1305. Also, in someembodiments, the inline service switch 1105 is configured to, or is partof a filter architecture that is configured to, establish the L4connection session for its associated VM. In these embodiments, the ISS1105 would not need to establish a L4 connection session with its VM inorder to examine L4 parameters sent by the VM.

A time period after its initial request for the content piece, the VM115 starts a second set of content processing messages 1335 byrequesting the same content piece. In such situations, it is not unusualfor the VM to use a different source port for these new data packet.Because of the different source port, the ISS 1105 initially assumesthat the new data packets are for a new flow. Hence, the ISS 1105establishes another TCP session with its VM by performing a 3-way TCPhandshake. After establishing this second TCP session with its VM, theISS 1105 examines an initial set of one or more packets sent by its VM115 and determines this set of packets includes a content request. ISS1105 then extracts the file name from the URL of this request, comparesthis file name with the file names stored in its connection storage1190, and determines that it has previously processed a request for thiscontent piece by using service node 1305.

Accordingly, the ISS 1105 performs another 3-way TCP handshake with theservice node 1305 in order to establish another L4 connection sessionwith the service node 1305. Once this session is established, the ISS1105 relays the content request to this service node, and afterobtaining the responsive data packets, relays them to its VM.

This approach is highly beneficial in that it saves the servicecluster's resources from having to obtain the same piece of contenttwice. In other words, going to the same service node is efficient asthe service node 1305 probably still has the requested content in itscache or memory. When multiple ISS 1105 on the same host share the sameconnection storage, this approach is also beneficial in that it allowsone ISS of one VM to go to the same service node as the ISS of anotherVM when both VMs requested the same piece of content within a particulartime period.

FIG. 14 illustrates a process 1400 that an ISS 1105 of a VM 115 performsto process a service request in a sticky manner from an associated VM.In performing this process, the ISS 1105 (1) determines whether therequest is associated with a service request previously processed by aservice node of a service-node cluster, and (2) if so, directs theservice request to the service node that was previously used. The ISS1105 determines whether the request is associated with a previouslyprocessed request by examining L4+ session parameters that it stored forprevious requests in its connection storage 1190.

The process 1400 starts when the ISS 1105 receives a data message sentby its associated VM. In some embodiments, the ISS 1105 is deployed inthe VM's egress datapath so that it can intercept the data messages sentby its VM. In some embodiments, the ISS 1105 is called by the VM's VNICor by the SFE port that communicatively connects to the VM's VNIC. Insome embodiments, the received data message is addressed to adestination address (e.g., destination IP or virtual IP address)associated with a service node cluster. Based on this addressing, theISS ascertains (at 1405) that the data message is a request for aservice that is performed by the service nodes of the cluster.

At 1410, the process determines whether the data message is part of adata message flow for which the process has processed other datamessages. In some embodiments, the process makes this determination byexamining its connection storage 1190, which stores records of the datamessage flows that it has recently processed as further described belowby reference to 1445. Each record stores one or more service parametersthat the process previously extracted from the previous data messagesthat it processed. Examples of such session parameters include sessioncookies, session keys, file names, database server attributes (e.g.,user name), etc. Each record also identifies the service node thatpreviously processed data messages that are part of the same flow. Insome embodiments, this record also stores the flow's identifier (e.g.,the five tuple identifier). In addition, the connection storage is hashaddressable (e.g., locations in the connection storage are identifiedbased on a hash of the flow's identifier) in some embodiments.

When the process determines (at 1410) that it has previously processed adata message from the same flow as the received data message, ittransitions to 1415. At 1415, the process retrieves from the connectionstorage 1190 the identity of the service node that it used to processprevious data messages of the same flow, and forwards the received datamessage to the identified service node to process. In some cases, at1415, the process also (1) retrieves the previously stored sessionparameter(s) (e.g., session cookie) for the data message's flow from theconnection storage 1190, and (2) forwards the retrieved parameter(s) tothe identified service node so that this node can use the parameter(s)to process the forwarded data message. Instead of forwarding theretrieved service parameter(s) to the service node, the process 1400 insome embodiments uses the retrieved service parameter(s) to perform anoperation on the received data message, before forwarding the datamessage to the identified service node. Also, in some embodiments, theprocess provides additional context information (e.g., Tenant ID,Network ID, etc.), which cannot be encoded in the tunnel key. After1415, the process 1400 ends.

When the process determines (at 1410) that it has not previouslyprocessed a data messages from the same data message flow, the processestablishes (at 1420) an L4 session with the VM (e.g., by performing athree-way TCP handshake with the VM). After establishing the L4 sessionwith its VM, the process determines (at 1425) whether an initial set ofone or more packets sent by its VM contain one or more L4 serviceparameters that the process can use to determine whether it haspreviously processed a similar service request. Again, examples of suchsession parameters include session cookies, session keys, file names,database server attributes (e.g., user name), etc.

When the set of packets includes one or more such L4 service parameters,the process determines (at 1420) whether the connection storage 1190contains a record for the identified L4 service parameter(s). If so, theprocess transitions to 1415 to forward the data message to the record'sidentified service node. In some embodiments, the process 1400 alsoperforms other operations at 1415, as described above. The process 1400can transition from either 1410 or 1420 to 1415, because the process candetermine that the same session record is applicable based either onouter packet header values (e.g., L2, L3 and L4 values) of one messageflow, or on inner packet values (e.g., L4+ parameters) of anothermessage flow. The inner packet values might match a session record whenthe VM uses a different source port for a service session that followsan earlier related service session, as described above by reference toFIG. 12. This would also result when the VM requests the same file andthe file name is used to identify the same service node, as describedabove by reference to FIG. 13.

When the process 1400 determines that the examined packets do notinclude an L4+ service parameter for which the connection storage storesa record that identifies a service node as the service node forprocessing the VM's service request, the process uses (at 1430) the loadbalancer of the ISS to select a service node in a service node clusterto process the service request from the VM. To select service nodes in aload-balance manner, the process 1400 uses a service rule that matchesthe received message flow attributes. The service rule specifies a setof service nodes, and a set of load-balancing criteria (e.g., weightvalues) for each of the rule's specified service nodes. Differentservice rules in some embodiments specify different service action setsthat have to be performed, and the load-balancing criteria for eachservice action of the rule specify the criteria for distributing datamessages amongst the service nodes for that action.

After selecting (1430) a service node for the data message, the processestablishes (at 1435) an L4 session with the service node (e.g., througha three-way TCP handshake with the service node), because it softterminated the session with the VM. Next, at 1440, the process uses thisconnection session to forward the data messages that it receives fromthe VM to the selected service node.

Through this connection, the process also receives responsive datamessages from the selected service node, and it forwards these receiveddata messages to the VM through its connection session with the VM. Inrelaying the data messages back and forth, the process in someembodiments adjusts the TCP sequence numbers of the data messages, asdescribed above. In some embodiments, the process exchanges messageswith the selected service node through a tunnel. Hence, in theseembodiments, the process encapsulated the data messages that it relaysto the service node with a tunnel header, and it removes this tunnelheader from the data messages that it passes from the service node tothe VM. As the process 1400 relays data messages to the service node, itupdates in some embodiments the statistics that it maintains in the ISSSTAT storage to keep track of the data messages that it is directing todifferent service nodes.

At 1445, the process stores in the connections storage 1190 one or moreL4+ parameters that it extracts from the data messages that it relaysbetween the VM and selected service node. In some embodiments, theprocess stores the L4+ parameter set in a record that identifies theselected service node, as mentioned above. By storing the selectedservice node's identity for the extracted L4+ parameter set, the processcan later re-use the selected service node for processing data messagesthat related to the same L4+ parameter set. In some embodiments, therecord created at 1445 also stores the flow identifier of the datamessage received at 1405, so that this record can also be identifiedbased on the outer packet header attributes of the flow. After 1445, theprocess ends.

The inline service switches of the embodiments described above byreference to FIGS. 12-14 select service nodes in a service node cluster,and relay data messages to the selected service nodes. However, asdescribed above, the inline service switches of some embodiments selectservice node clusters in a group of service node clusters, and forwarddata messages to the selected clusters. One of ordinary skill willrealize that the inline service switches of some embodiments implementsticky service request processing by forwarding data messages to serviceclusters (that perform the same service) in a sticky manner. In otherwords, an inline switch in these embodiments stores L4+ sessionparameters that allow this switch to forward the same or similar servicesession requests to the same service node clusters in a cluster groupthat performs the same service.

FIG. 15 illustrates a more detailed architecture of a host 1500 thatexecutes the ISS filters of some embodiments of the invention. As shown,the host 1500 executes multiple VMs 1505, an SFE 1510, multiple ISSfilters 1530, multiple load balancers 1515, an agent 1520, and apublisher 1522. Each ISS filter has an associated ISS rule storage 1550,a statistics (STAT) data storage 1554, and a connection state storage1590. The host also has an aggregated (global) statistics data storage1586.

In some embodiments, the VMs execute on top of a hypervisor, which is asoftware layer that enables the virtualization of the shared hardwareresources of the host. In some of these embodiments, the hypervisorsprovide the ISS filters in order to support inline service switchingservices to its VMs.

The SFE 1510 executes on the host to communicatively couple the VMs ofthe host to each other and to other devices outside of the host (e.g.,other VMs on other hosts) through one or more forwarding elements (e.g.,switches and/or routers) that operate outside of the host. As shown, theSFE 1510 includes a port 1532 to connect to a physical network interfacecard (not shown) of the host, and a port 1535 that connects to each VNIC1525 of each VM.

In some embodiments, the VNICs are software abstractions of the physicalnetwork interface card (PNIC) that are implemented by the virtualizationsoftware (e.g., by a hypervisor). Each VNIC is responsible forexchanging data messages between its VM and the SFE 1510 through itscorresponding SFE port. As shown, a VM's ingress datapath for its datamessages includes the SFE port 1532, the SFE 1510, the SFE port 1535,and the VM's VNIC 1525. A VM's egress datapath for its data messagesinvolves the same components but in the opposite direction, specificallyfrom the VNIC 1525, to the port 1535, to the SFE 1510, and then to theport 1532.

Through its port 1532 and a NIC driver (not shown), the SFE 1510connects to the host's PNIC to send outgoing packets and to receiveincoming packets. The SFE 1510 performs message-processing operations toforward messages that it receives on one of its ports to another one ofits ports. For example, in some embodiments, the SFE tries to use headervalues in the VM data message to match the message to flow based rules,and upon finding a match, to perform the action specified by thematching rule (e.g., to hand the packet to one of its ports 1532 or1535, which directs the packet to be supplied to a destination VM or tothe PNIC). In some embodiments, the SFE extracts from a data message avirtual network identifier (VNI) and a MAC address. The SFE in theseembodiments uses the extracted VNI to identify a logical port group, andthen uses the MAC address to identify a port within the port group. Insome embodiments, the SFE 1510 is a software switch, while in otherembodiments it is a software router or a combined softwareswitch/router.

The SFE 1510 in some embodiments implements one or more logicalforwarding elements (e.g., logical switches or logical routers) withSFEs executing on other hosts in a multi-host environment. A logicalforwarding element in some embodiments can span multiple hosts toconnect VMs that execute on different hosts but belong to one logicalnetwork. In other words, different logical forwarding elements can bedefined to specify different logical networks for different users, andeach logical forwarding element can be defined by multiple SFEs onmultiple hosts. Each logical forwarding element isolates the traffic ofthe VMs of one logical network from the VMs of another logical networkthat is serviced by another logical forwarding element. A logicalforwarding element can connect VMs executing on the same host and/ordifferent hosts.

The SFE ports 1535 in some embodiments include one or more functioncalls to one or more modules that implement special input/output (I/O)operations on incoming and outgoing packets that are received at theports. One of these function calls for a port is to an ISS filter 1530.In some embodiments, the ISS filter performs the service switchoperations on outgoing data messages from the filter's VM. In theembodiments illustrated in FIG. 15, each port 1535 has its own ISSfilter 1530. In other embodiments, some or all of the ports 1535 sharethe same ISS filter 1530 (e.g., all the ports on the same host share oneISS filter, or all ports on a host that are part of the same logicalnetwork share one ISS filter).

Examples of other I/O operations that are implemented through functioncalls by the ports 1535 include firewall operations, encryptionoperations, etc. By implementing a stack of such function calls, theports can implement a chain of I/O operations on incoming and/oroutgoing messages in some embodiments. In the example illustrated inFIG. 15, the ISS filters are called from the ports 1535 for a datamessage transmitted by a VM. Other embodiments call the ISS filter fromthe VM's VNIC or from the port 1532 of the SFE for a data message sentby the VM, or call this filter from the VM's VNIC 1525, the port 1535,or the port 1532 for a data message received for the VM (i.e., deploythe service operation call along the ingress path for a VM).

For the data messages that are sent by its associated VM, an ISS filter1530 enforces one or more service rules that are stored in the ISS rulestorage 1550. These service rules implement one or more servicepolicies. Based on the service rules, the ISS filter (1) determineswhether a sent data message should be processed by one or more servicenodes or clusters, and (2) if so, selects a service node or cluster forprocessing the data message and forwards the data message to theselected node or cluster (e.g., through a tunnel).

In some embodiments, each service rule in the service rule storage 1550has (1) an associated set of data message identifiers (e.g., packetheader values), (2) a set of one or more actions, (3) for each action, aset of service nodes or service node clusters that perform the action,and (4) for each action, a set of load balancing criteria for select aservice node or cluster in the rule's set of service node or servicenode clusters. As further described below, a rule in some embodimentscan identify a service node or cluster by providing an identifier forthe tunnel connected to the service node or cluster (e.g., from thehost, or the SFE, or the ISS filter).

After being called to process a data message, the ISS filter 1530 insome embodiments determines whether the received data message'sidentifiers (e.g., five tuples) match the data message identifiers of aservice rule in its service rule storage. When the received datamessage's header values do not match the rule-matching identifier of oneor more service rules in the service rule storage, the ISS filter 1530informs the port 1535 that it has completed processing of the datamessage, without performing any service on the data message. The ISSfilter also stores a record of this decision in its connection storage1590. This record identifies the data message flow identifier (e.g., itsfive tuple identifier) and identifies that no service action needs to beperformed for this data message flow. This record can be used for quickprocessing of subsequent data messages of the same flow.

When a data message's header values matches a service rule, the ISSfilter performs the set of actions specified with the matching servicerule. When the set of actions includes more than one action, the ISSfilter performs the service actions sequentially. In some embodiments, aservice action of a matching service rule is performed by a service nodeof a SN group or a SN cluster of a SN cluster group. Accordingly, toperform such a service action, the ISS filter selects a service node orcluster for processing the data message and forwards the data message tothe selected node or cluster.

In some embodiments, the ISS filter 1530 forwards the data message tothe selected node or cluster through a tunnel. In other embodiments, theISS filter 1530 connects to some service nodes/clusters through tunnels,while not using tunnels to connect to other service nodes/clusters. Forinstance, in some embodiments, the ISS filter 1530 might use L3 or L4destination network address translation (DNAT), or MAC redirect, toforward data messages to some of the service nodes. Also, in someembodiments, one or more service nodes might be executing on the samehost computer 1500 as the ISS filter 1530, and in these embodiments theISS filter 1530 directs the data messages to these service nodes throughDNAT, MAC redirect or some other forwarding mechanism that is part ofthe filter framework of some embodiments. In some embodiments, servicerules have identifiers that specify different re-direction mechanisms,as one rule can, or different rules can, identify different servicenodes or SN clusters that are accessible through different re-directionmechanisms.

When the ISS filter 1530 uses a tunnel to send a data message to aservice node or cluster, the ISS filter in some embodiments encapsulatesthe data message with a tunnel packet header. This packet headerincludes a tunnel key in some embodiments. In other embodiments, the ISSfilter 1530 has another I/O chain filter encapsulate the data messageswith tunnel packet headers.

In some embodiments, the ISS filter 1530 has to establish an L4connection session with the service node. In some of embodiments, theISS filter also has to establish an L4 connection session with its VM.To establish an L4 connection session, the ISS filter performs athree-way TCP/IP handshake with the other end of the connection (e.g.,with the service node or VM) in some embodiments.

As mentioned above, a matching service rule in some embodimentsspecifies a set of load balancing criteria for each set of service nodesor clusters that perform a service action specified by the rule. Inthese embodiments, the ISS filter 1530 has its associated load balancer1550 use the rule's specified load balancing criteria to select aservice node from the specified SN group, or a service cluster from thespecified SN cluster group.

The load balancer distributes the data message load for performing aservice action to the service nodes or the SN clusters in a loadbalanced manner specified by the load balancing criteria. In someembodiments, the load balancing criteria are weight values associatedwith the service node or SN clusters. One example of using weight valuesto distribute new data message flows to service nodes in a loadbalancing way was described above.

In some embodiments, the weight values are generated and adjusted by theagent 1520 and/or a controller set based on the load statistics. In someembodiments, each ISS filter 1530 has its own load balancer 1515, whilein other embodiments, multiple ISS filters 1530 share the same loadbalancer 1525 (e.g., ISS filters of VMs that are part of one logicalnetwork use one load balancer 1515 on each host).

The ISS filter 1530 stores in the connection state storage 1590 datarecords that maintain connection state for data message flows that theISS filter 1530 has previously processed. This connection state allowsthe ISS filter 1530 to distribute data messages that are part of thesame flow statefully to the same content server. In some embodiments,each record in the connection storage corresponds to a data message flowthat the ISS filter 1530 has previously processed.

Each record stores a description of the set of service rules that haveto be applied to the flow's data messages or has a reference (e.g., apointer) to this description. In some embodiments, when the operation ofthe service rule set requires the data message to be dropped, theconnection-storage record also specifies this action, or specifies thisaction in lieu of the service rule description. Also, when no servicehas to be performed for data messages of this flow, theconnection-storage record in some embodiments indicates that the ISSshould allow the received data message to pass along the VM's egressdatapath. In some embodiments, this record stores the flow's identifier(e.g., the five tuple identifiers). In addition, the connection storageis hash addressable (e.g., locations in the connection storage areidentified based on a hash of the flow's identifier) in someembodiments. When the ISS filter 1530 stores an L4+ session parameter,the ISS filter 1530 in some of these embodiments stores this parameterin the connection state storage 1590.

In some embodiments, each time a ISS filter directs a message to aservice node or SN cluster, the ISS filter updates the statistics thatit maintains in its STAT data storage 1554 for the data traffic that itrelays to the service nodes and/or clusters. Examples of such statisticsinclude the number of data messages (e.g., number of packets), datamessage flows and/or data message bytes relayed to each service node orcluster. In some embodiments, the metrics can be normalized to units oftime, e.g., per second, per minute, etc.

In some embodiments, the agent 1520 gathers (e.g., periodicallycollects) the statistics that the ISS filters store in the STAT datastorages 1554, and relays these statistics to a controller set. Based onstatistics that the controller set gathers from various agents 1520 ofvarious hosts, the controller set (1) distributes the aggregatedstatistics to each host's agent 1520 so that each agent can defineand/or adjust the load balancing criteria for the load balancers on itshost, and/or (2) analyzes the aggregated statistics to specify anddistribute some or all of the load balancing criteria to the hosts. Insome embodiments where the controller set generates the load balancingcriteria from the aggregated statistics, the controller set distributesthe generated load balancing criteria to the agents 1520 of the hosts.

In the embodiments, where the agent 1520 receives new load balancingcriteria or new ISS rules from the controller set, the agent 1520 storesthese criteria or new rules in the host-level rule storage 1588 forpropagation to the ISS rule storages 1550. In the embodiment where theagent 1520 receives aggregated statistics from the controller set, theagent 1520 stores the aggregated statistics in the global statisticsdata storage 1586. In some embodiments, the agent 1520 analyzes theaggregated statistics in this storage 1586 to define and/or adjust theload balancing criteria (e.g., weight values), which it then stores inthe rule storage 1588 for propagation to the ISS rule storages 1550. Thepublisher 1522 retrieves each service rule and/or updated load balancingcriteria that the agent 1520 stores in the rule storage 1588, and storesthe retrieved rule or criteria in the ISS rule storage 1550 of each ISSfilter that needs to enforce this rule or criteria.

The agent 1520 not only propagates service rule updates based on newlyreceived aggregated statistics, but it also propagates service rules orupdates service rules based on updates to SN group or cluster group thatit receives from the controller set. Again, the agent 1520 stores suchupdated rules in the rule data storage 1588, from where the publisherpropagates them to ISS rule storages 1550 of the ISS filters 1530 thatneed to enforce these rules. In some embodiments, the controller setprovides the ISS agent 1520 with high level service policies that theISS agent converts into service rules for the ISS filters to implement.In some embodiments, the agent 1520 communicates with the controller setthrough an out-of-band control channel.

Some embodiments provide a controller-driven method for reconfiguringthe application or service layer deployment in a datacenter. In someembodiments, the controller set 120 provides a host computer withparameters for establishing several tunnels, each between the hostcomputer and a service node that can be in the same datacenter as thehost computer or can be at a different location as the datacenter. Theprovided tunnel-establishing parameters include tunnel header packetparameters in some embodiments. These parameters in some embodimentsalso include tunnel keys, while in other embodiments, these parametersinclude parameters for generating the tunnel keys. Tunnel keys are usedin some embodiments to allow multiple different data message flows touse one tunnel from a host to a service node. In some embodiments,establishing a tunnel entails configuring modules at the tunnelendpoints with provisioned tunnel parameters (e.g., tunnel headerparameters, tunnel keys, etc.).

In some embodiments, the tunnels connect the host computer with severalservice nodes of one or more service providers that operate in the samedatacenter or outside of the datacenter. In some deployments, only onetunnel is established between each host and a service node and all ISSfilters on the host use the same tunnel for relaying data messages tothe service node. This is done to reduce the number of tunnels. Thisapproach can be viewed as establishing one tunnel between the host's SFEand the service node. In other deployments, more than one tunnel isestablished between a host and a service node. For instance, in somedeployments, one tunnel is established between each ISS filter on thehost and the service node.

In some embodiments, the controller set 120 define data-messagedistribution rules for SCNs in the datacenter, and push these rules tothe ISS filters of the SCNs. The ISS filters then distribute the datamessages to the data compute nodes (DCNs) that are identified by thedistribution rules as the DCNs for the data messages. In otherembodiments, the controller set 120 define data-message distributionpolicies for SCNs in the datacenter, and push these policies to thehosts that execute the SCNs. The hosts then generate distribution rulesfrom these policies and then configure their ISS filters based on thesepolicies.

In some embodiments, distribution rule includes (1) a rule identifierthat is used to identify data message flows that match the rule, and (2)a set of service actions for data message flows that match the rule. Insome embodiments, the rule identifier can be defined in terms of groupidentifiers (such as virtual IP addresses (VIPs)) or metadata tagsassigned by application level gateways.

In some embodiments, each service action of a rule is defined byreference an identifier that identifies a set of service nodes forperforming the service action. Some rules can specify two or moreservice actions that are performed by two or more sets of service nodesof two or more service providers. In some embodiments, each service-nodeset is a service node cluster and is defined in the rule by reference toa set of tunnel identifiers (1) that identifies one tunnel to theservice node cluster, or (2) that identifies one tunnel to each servicenode in the service-node cluster.

For each service action, a distribution rule also includes a set ofselection criteria for each set of service action of the rule. In someembodiments, the selection criteria set includes one or more criteriathat are dynamically assessed (e.g., based on the identity of SCNsexecuting on the host, etc.). In some embodiments, the selectioncriteria set is a load balancing criteria set that specifies criteriafor distributing new data message flows amongst the service nodes thatperform the service action.

This controller-driven method can seamlessly reconfigure the applicationor service layer deployment in the datacenter without having toconfigure the SCNs to use new group addresses or tags (e.g., new VIPs).The controller set only needs to provide the inline switches with newdistribution rules that dictate new traffic distribution patterns basedon previously configured group addresses or tags. In some embodiments,the seamless reconfiguration can be based on arbitrary packet headerparameters (e.g., L2, L3, L4 or L7 parameters) that are used by theSCNs. In other words, these packet header parameters in some cases wouldnot have to include group addresses or tags.

As mentioned above, the inline switches in some embodiments can beconfigured to distribute data messages based on metadata tags that areassociated with the packets, and injected into the packets (e.g., as L7parameters) by application level gateways (ALGs). For example, as ALGsare configured to inspect and tag packets as the packets enter a networkdomain (e.g., a logical domain), the controller set in some embodimentsis configured to push new distribution policies and/or rules to theinline switches that configure these switches to implement newapplication or service layer deployment in the network domain.

The controller-driven method of some embodiments will now be describedby reference to FIGS. 16-19. FIG. 16 illustrates an example of acontroller re-configuring the application layer deployment to insert afirewall service operation between a set of webservers 1605 and a set ofapplication servers 1610. This figure illustrates a datacenter thatimplement a three-server layer deployment, in which the first layerincludes one or more webservers 1605, the second layer includes one ormore application servers 1610, and the third layer includes one or moredatabase servers 1615.

As shown, a controller 1620 initially configures the inline switches1630 of the webservers 1610 with message distribution rules that directthe switches to forward received packet flows that have a particular VIP(VIP1) as their destination IP address to the application servers. FIG.16 illustrates an example of this rule 1650. As shown, this rulespecifies VIP1 as a flow-matching attribute, AS (application server)type as the action type to perform, and the IP address set 1 as the setof IP addresses of the application servers 1610.

A time period after initially configuring the inline switches 1630, thecontroller 1620 re-configures these switches 1630 with new packetdistribution rules 1655 that direct the switches (1) to first forwardsuch a packet flow (i.e., a packet flow with VIP1 for their destinationIP address) to a set of firewall servers 1625, and then (2) if thefirewall servers do not direct the webservers to drop the packet flow,to forward the packets of this packet flow to the application servers1610. As shown, each rule 1655 specifies (1) VIP1 as a flow-matchingattribute, (2) FW (firewall) type as the first action's type, (3) the IPaddress set 2 as the set of IP addresses of the firewall servers 1625,(4) AS (application server) type as the second action's type, and (5)the IP address set 1 as the set of IP addresses of the applicationservers 1610.

In some embodiments, the new packet distribution rule that thecontroller 1620 provides to the webservers switches 1630 specifies, forflows with VIP1 destination IP, a service policy chain that (1) firstidentifies a firewall operation and then (2) identifies anapplication-level operation. This new rule replaces a prior rule thatonly specifies for flows with VIP1 destination IP the application-leveloperation.

In some embodiments, for each operation that the rule specifies, therule includes, or refers to, (1) identifiers (e.g., IP addresses, tunnelidentifiers, etc.) of a set of servers that perform that operation, and(2) load balancing criteria for distributing different flows todifferent servers in the set. In directing the data messages to thefirewalls 1625, the inline switches perform load-balancing operationsbased on the load balancing criteria to spread the packet flow loadamong the firewalls 1625. In some embodiments, the controller 1620configures the inline switches 1630 with multiple different rules formultiple different VIPs that are associated with multiple differentservice policy sets.

In the example of FIG. 16, the controller re-configures the webservers1605 (1) to direct a packet flow with VIP1 as the destination IPaddresses to the firewall servers, and then after receiving the firewallservers assessment as to whether the packet flow should not be dropped,(2) to forward the packets for this flow to the application server. FIG.17 illustrates that in other embodiments, the controller 1720 (1)re-configures the inline switches 1730 of the webservers 1705 to forwardall packets with the destination IP address VIP1 to the firewall servers1725, and (2) configures the firewall servers 1725 to forward thesepackets directly to the application servers 1710 if the firewall servers1725 determine that the packets should not be dropped this approach.

As shown, the controller 1720 initially configures the inline switcheswith the rule 1650, which was described above. The controller thenre-configures the inline switches with the rule 1755, which specifies(1) VIP1 as a flow-matching attribute, (2) FW (firewall) type as theaction type, and (3) the IP address set 2 as the set of IP addresses ofthe firewall servers 1725. In the example of FIG. 17, the controllerthen configures the firewall servers 1725 to forward any passed-throughpackets directly to the application servers 1710. In some of theseembodiments, the controller configures the firewall servers byconfiguring the inline switches that are placed in the egress paths ofthe firewall servers to forward the firewall processed packets to theapplication servers 1710.

FIG. 18 illustrates a process 1800 that a controller 1620 performs todefine the service policy rules for an inline switch of a VM that isbeing provisioned on a host. As shown, the process 1800 initiallyidentifies (at 1805) a new inline switch to configure. Next, at 1810,the process selects a virtual identifier (e.g., a VIP, a virtualaddress, etc.) that may be used to identify DCN groups or securitypolicies/rules in packet flows that the inline switch may receive.

At 1815, the process 1800 identifies a service policy set that isassociated with the selected virtual identifier. A service policy setspecifies one or more service actions that need to be performed forpacket flows that are associated with the selected virtual identifier.The process then defines (at 1820) a service rule for the identifiedservice policy set. For each service action in the service policy set,the service rule specifies a set of service nodes or service-nodeclusters that performs the service action.

At 1825, the process then selects a service action in the identifiedservice policy set. Next, at 1830, the process generates and stores inthe defined rule (i.e., the rule defined at 1820) load balancingcriteria for the set of service nodes or service-node clusters thatperform the selected service action. The process generates the loadbalancing criteria based on the membership of the set of service nodesor service-node clusters, and statistics regarding the packet flow loadon the service-node or service-cluster set that the controller collectsfrom the inline switches.

At 1835, the process determines whether it has examined all the serviceactions in the identified service policy set. If not, the processselects (at 1840) another service action in the identified servicepolicy set, and then transitions back to 1830 to generate and store loadbalancing criteria for the set of service nodes or service-node clustersthat perform the selected service action. When the process determinesthat it has examined all the service actions in the identified servicepolicy set, the process determines (at 1845) whether it has processedall virtual identifiers that may be used to identify DCN groups orsecurity policies/rules in packet flows that the inline switch mayreceive.

If not, the process selects (at 1850) another virtual identifier thatmay be used to identify DCN groups or security policies/rules in packetflows that the inline switch may receive. After 1850, the processreturns to 1815 to repeat operations 1815-1850 for the selected virtualidentifier. When the process determines (at 1845) that it has examinedall virtual identifiers for the inline switch, it ends.

In process 1800, a service policy set is associated with a virtualidentifier that may be used in a packet flow that an inline switch mayreceive. In other embodiments, the controller can define a services rulefor a service policy set that is associated with a set of two or morevirtual identifiers (e.g., a VIP and a L7 tag), or with a virtualidentifier and one or more other packet header values (e.g., source IPaddress, source port address, etc.). More generally, the controller insome embodiments can define a service rule that defines one or moreservice actions to implement a service policy set and can associate thisservice rule with any arbitrary combination of physical and/or virtualpacket header values.

In this manner, a controller in some embodiments can seamlesslyreconfigure the application or service layer deployment in thedatacenter without having to configure the SCNs to use new DCN groupaddresses (e.g., new VIPs). The controller only needs to provide theinline switches with new distribution rules that dictate new trafficdistribution patterns based on previously configured DCN group addressesand/or based on any arbitrary packet header parameters (e.g., L2, L3, L4or L7 parameters) that are used by the SCNs.

FIG. 19 illustrates a process 1900 for modifying a service rule andreconfiguring inline service switches that implement this service rule.This process is performed by each controller in a set of one or morecontrollers in some embodiments. As shown, the process 1900 starts (at1905) when it receives a modification to a service policy set for whichthe controller set has previously generated a service rule anddistributed this service rule to a set of one or more inline switchesthat implements the service policy set. The received modification mayinvolve the removal of one or more service actions from the servicepolicy set or the addition of one or more service actions to the servicepolicy set. Alternatively or conjunctively, the received modificationmay involve the reordering of one or more service actions in the servicepolicy set.

Next, at 1910, the process 1900 changes the service action chain in theservice rule to account for the received modification. This change mayinsert one or more service actions in the rule's action chain, mayremove one or more service actions from the rule's action chain, or mayreorder one or more service actions in the rule's action chain. In someembodiments, a service rule specifies a service action chain byspecifying (1) two or more service action types and (2) for each serviceaction type, specifying a set of IP addresses that identify a set ofservice nodes or service-node clusters that perform the service actiontype. Each service rule in some embodiments also specifies a set of loadbalancing criteria for each action type's set of IP addresses.

For each new service action in the service action chain, the process1900 then defines (at 1915) the set of load balancing criteria (e.g., aset of weight values for a weighted, round-robin load balancing scheme).In some embodiments, the process generates the load balancing criteriaset based on (1) the membership of the set of service nodes orservice-node clusters that perform the service action, and (2)statistics regarding the packet flow load on the service-node orservice-cluster set that the controller collects from the inlineswitches.

Lastly, at 1920, the process distributes the modified service rule tothe hosts that execute the inline service switches that process theservice rule. These are the inline service switches that may encounterpackets associated with the modified service rule. After 1920, theprocess ends.

Many of the above-described features and applications are implemented assoftware processes that are specified as a set of instructions recordedon a computer readable storage medium (also referred to as computerreadable medium). When these instructions are executed by one or moreprocessing unit(s) (e.g., one or more processors, cores of processors,or other processing units), they cause the processing unit(s) to performthe actions indicated in the instructions. Examples of computer readablemedia include, but are not limited to, CD-ROMs, flash drives, RAM chips,hard drives, EPROMs, etc. The computer readable media does not includecarrier waves and electronic signals passing wirelessly or over wiredconnections.

In this specification, the term “software” is meant to include firmwareresiding in read-only memory or applications stored in magnetic storage,which can be read into memory for processing by a processor. Also, insome embodiments, multiple software inventions can be implemented assub-parts of a larger program while remaining distinct softwareinventions. In some embodiments, multiple software inventions can alsobe implemented as separate programs. Finally, any combination ofseparate programs that together implement a software invention describedhere is within the scope of the invention. In some embodiments, thesoftware programs, when installed to operate on one or more electronicsystems, define one or more specific machine implementations thatexecute and perform the operations of the software programs.

FIG. 20 conceptually illustrates an electronic system 2000 with whichsome embodiments of the invention are implemented. The electronic system2000 can be used to execute any of the control, virtualization, oroperating system applications described above. The electronic system2000 may be a computer (e.g., a desktop computer, personal computer,tablet computer, server computer, mainframe, a blade computer etc.),phone, PDA, or any other sort of electronic device. Such an electronicsystem includes various types of computer readable media and interfacesfor various other types of computer readable media. Electronic system2000 includes a bus 2005, processing unit(s) 2010, a system memory 2025,a read-only memory 2030, a permanent storage device 2035, input devices2040, and output devices 2045.

The bus 2005 collectively represents all system, peripheral, and chipsetbuses that communicatively connect the numerous internal devices of theelectronic system 2000. For instance, the bus 2005 communicativelyconnects the processing unit(s) 2010 with the read-only memory 2030, thesystem memory 2025, and the permanent storage device 2035.

From these various memory units, the processing unit(s) 2010 retrievesinstructions to execute and data to process in order to execute theprocesses of the invention. The processing unit(s) may be a singleprocessor or a multi-core processor in different embodiments.

The read-only-memory (ROM) 2030 stores static data and instructions thatare needed by the processing unit(s) 2010 and other modules of theelectronic system. The permanent storage device 2035, on the other hand,is a read-and-write memory device. This device is a non-volatile memoryunit that stores instructions and data even when the electronic system2000 is off. Some embodiments of the invention use a mass-storage device(such as a magnetic or optical disk and its corresponding disk drive) asthe permanent storage device 2035.

Other embodiments use a removable storage device (such as a floppy disk,flash drive, etc.) as the permanent storage device. Like the permanentstorage device 2035, the system memory 2025 is a read-and-write memorydevice. However, unlike storage device 2035, the system memory is avolatile read-and-write memory, such a random access memory. The systemmemory stores some of the instructions and data that the processor needsat runtime. In some embodiments, the invention's processes are stored inthe system memory 2025, the permanent storage device 2035, and/or theread-only memory 2030. From these various memory units, the processingunit(s) 2010 retrieves instructions to execute and data to process inorder to execute the processes of some embodiments.

The bus 2005 also connects to the input and output devices 2040 and2045. The input devices enable the user to communicate information andselect commands to the electronic system. The input devices 2040 includealphanumeric keyboards and pointing devices (also called “cursor controldevices”). The output devices 2045 display images generated by theelectronic system. The output devices include printers and displaydevices, such as cathode ray tubes (CRT) or liquid crystal displays(LCD). Some embodiments include devices such as a touchscreen thatfunction as both input and output devices.

Finally, as shown in FIG. 20, bus 2005 also couples electronic system2000 to a network 2065 through a network adapter (not shown). In thismanner, the computer can be a part of a network of computers (such as alocal area network (“LAN”), a wide area network (“WAN”), or an Intranet,or a network of networks, such as the Internet. Any or all components ofelectronic system 2000 may be used in conjunction with the invention.

Some embodiments include electronic components, such as microprocessors,storage and memory that store computer program instructions in amachine-readable or computer-readable medium (alternatively referred toas computer-readable storage media, machine-readable media, ormachine-readable storage media). Some examples of such computer-readablemedia include RAM, ROM, read-only compact discs (CD-ROM), recordablecompact discs (CD-R), rewritable compact discs (CD-RW), read-onlydigital versatile discs (e.g., DVD-ROM, dual-layer DVD-ROM), a varietyof recordable/rewritable DVDs (e.g., DVD-RAM, DVD-RW, DVD+RW, etc.),flash memory (e.g., SD cards, mini-SD cards, micro-SD cards, etc.),magnetic and/or solid state hard drives, read-only and recordableBlu-Ray® discs, ultra density optical discs, any other optical ormagnetic media, and floppy disks. The computer-readable media may storea computer program that is executable by at least one processing unitand includes sets of instructions for performing various operations.Examples of computer programs or computer code include machine code,such as is produced by a compiler, and files including higher-level codethat are executed by a computer, an electronic component, or amicroprocessor using an interpreter.

While the above discussion primarily refers to microprocessor ormulti-core processors that execute software, some embodiments areperformed by one or more integrated circuits, such as applicationspecific integrated circuits (ASICs) or field programmable gate arrays(FPGAs). In some embodiments, such integrated circuits executeinstructions that are stored on the circuit itself.

As used in this specification, the terms “computer”, “server”,“processor”, and “memory” all refer to electronic or other technologicaldevices. These terms exclude people or groups of people. For thepurposes of the specification, the terms display or displaying meansdisplaying on an electronic device. As used in this specification, theterms “computer readable medium,” “computer readable media,” and“machine readable medium” are entirely restricted to tangible, physicalobjects that store information in a form that is readable by a computer.These terms exclude any wireless signals, wired download signals, andany other ephemeral signals.

While the invention has been described with reference to numerousspecific details, one of ordinary skill in the art will recognize thatthe invention can be embodied in other specific forms without departingfrom the spirit of the invention. For instance, in several embodimentsdescribed above, the inline switches intercept the data messages alongthe egress datapath of the SCNs. In other embodiments, however, theinline switches intercept the data messages along the ingress datapathof the SCNs.

In addition, a number of the figures conceptually illustrate processes.The specific operations of these processes may not be performed in theexact order shown and described. The specific operations may not beperformed in one continuous series of operations, and different specificoperations may be performed in different embodiments. Furthermore, theprocess could be implemented using several sub-processes, or as part ofa larger macro process. Thus, one of ordinary skill in the art wouldunderstand that the invention is not to be limited by the foregoingillustrative details, but rather is to be defined by the appendedclaims.

The invention claimed is:
 1. A method of implementing a service model ina datacenter comprising a plurality of host computers executing aplurality of source compute nodes (SCNs), the method comprising:providing a particular host computer with parameters for establishingfirst and second tunnels between the particular host computer and firstand second service nodes of first and second service providers externalto the datacenter; and providing the particular host computer with aservice-action set that includes first and second service actions to berespectively performed by the first and second service nodes on at leastone data message flow of one SCN executing on the particular hostcomputer, each service action in the service-action set defined byreferencing an identifier that identifies one service provider forperforming the service action, each tunnel for use in relaying each datamessage of said data message flow to a service node of a serviceprovider to perform a service action on the data message, wherein afterperforming the first service action on each data message of said datamessage flow, the first service node of the first service provider sendsa response data message back to the particular host computer along thefirst tunnel and the data message is sent to the second service node ofthe second service provider along the second tunnel for the secondservice node to perform the second service action on the data message.2. The method of claim 1, wherein the provided service-action set isprovided with a flow identifier that identifies the data message flow towhich the first and second service actions of the providedservice-action set have to be applied.
 3. The method of claim 2, whereinproviding the service-action set comprises providing a service-actionrule that comprises the service-action set and the flow identifier ofthe data message flow.
 4. The method of claim 2, wherein providing theservice-action set comprises providing a service-action policy fromwhich the particular host computer generates a service-action rule, saidservice-action rule comprising the service-action set and the flowidentifier of the data message flow.
 5. The method of claim 2, whereinthe service-action set's provided flow identifier is for use by aservice-processing module that executes on the particular host computerand that compares header values of SCN-associated data message flowswith the flow identifier in order to identify data message flows onwhich the service-action set has to be performed.
 6. The method of claim5, wherein the service-processing module is a filter deployed on anegress datapath of the SCN in order to intercept and examine datamessages that the SCN transmits.
 7. The method of claim 5, wherein theservice-processing module is a filter deployed on an ingress datapath ofthe SCN in order to intercept and examine data messages that arereceived for SCN before these messages are supplied to the SCN.
 8. Themethod of claim 1, wherein the provided tunnel-establishing parameterscomprise tunnel header packet parameters.
 9. The method of claim 8,wherein the provided tunnel-establishing parameters further comprisetunnel keys for allowing multiple different data message flows to useone tunnel from the particular host computer to a particular serviceprovider.
 10. The method of claim 8, wherein the providedtunnel-establishing parameters further comprise parameters forgenerating tunnel keys for allowing multiple different data messageflows to use one tunnel from the particular host computer to aparticular service provider.
 11. The method of claim 1, wherein theservice-provider identifier identifies the service provider byidentifying a tunnel to a service node of the service provider.
 12. Themethod of claim 1, wherein providing the tunnel-establishing parameterscomprises providing parameters to establish a plurality of tunnels to aplurality of service nodes of a first service provider, and providingthe service-action set comprises providing a service-action identifierthat identifies the first service provider for a service action througha plurality of tunnel identifiers that identify the plurality of tunnelsto the plurality of service nodes of the first service provider.
 13. Themethod of claim 1, wherein providing the tunnel-establishing parameterscomprises providing parameters to establish a plurality of tunnels to aplurality of service nodes of the first service provider (SP), themethod further comprising providing a set of load balancing criteria forselecting tunnels in the plurality of first SP tunnels for data messageflows distributed to the first SP, said selection of tunnelsdistributing data message flows among the plurality of service nodes ofthe first SP in a load balanced way based on the load balancing criteriaset.
 14. The method of claim 1, wherein providing thetunnel-establishing parameters comprises providing parameters toestablish at least two tunnels to two service nodes of two serviceproviders that perform the same service action, the method furthercomprising providing a set of selection criteria for selecting one ofthe two provided tunnels to the first and second service providers for adata message flow.
 15. The method of claim 14, wherein the selectioncriteria set comprises dynamically assessed criteria.
 16. The method ofclaim 1, wherein different service providers are different servicevendors that operate in different datacenters that connect to thedatacenter of the particular host computer through a public network. 17.The method of claim 1, wherein the data message sent to the firstservice node is a first data message and the response data message is asecond data message, and the response second data message is a modifiedversion of the first data message, said modification accounting for theprocessing of the first data message by the first service node.
 18. Anon-transitory machine readable medium storing a program forimplementing a service model in a datacenter comprising a plurality ofhost computers executing a plurality of source computer nodes (SCNs),the program comprising sets of instructions for: providing a particularhost computer with parameters for establishing first and second tunnelsbetween the particular host computer and first and second service nodesof first and second service providers external to the datacenter; andproviding the particular host computer with a service-action set thatincludes first and second service actions to be respectively performedby the first and second service nodes on at least one data message flowof one SCN executing on the particular host computer, each serviceaction in the service-action set defined by referencing an identifierthat identifies one service provider for performing the service action,each tunnel for use in relaying each data message of said data messageflow to a service node of a service provider to perform a service actionon the data message, wherein after performing the first service actionon each data message of said data message flow, the first service nodeof the first service provider sends a response data message back to theparticular host computer along the first tunnel and the data message issent to the second service node of the second service provider along thesecond tunnel for the second service node to perform the second serviceaction on the data message.
 19. The machine readable medium of claim 18,wherein the provided service-action set is provided with a flowidentifier that identifies the data message flow to which the first andsecond service actions of the provided service-action set have to beapplied, the set of instructions for providing the service-action setcomprises a set of instructions for providing a service-action policyfrom which the particular host computer generates a service-action rule,said service-action rule comprising the service-action set and the flowidentifier of the data message flow.
 20. The machine readable medium ofclaim 19, wherein the service-action set's provided flow identifier isfor use by a service-processing module that executes on the particularhost computer and that compares header values of SCN-associated datamessage flows with the flow identifier in order to identify data messageflows on which the service-action set has to be performed.
 21. Themachine readable medium of claim 18, wherein the providedtunnel-establishing parameters comprise tunnel header packet parametersand tunnel keys for allowing multiple different data message flows touse one tunnel from the particular host computer to a particular serviceprovider.
 22. The machine readable medium of claim 18, wherein theservice-action identifier identifies the service provider by identifyingone or more tunnels, each tunnel from the particular host computer to aservice node of the service provider.
 23. The machine readable medium ofclaim 18, wherein the set of instructions for providing thetunnel-establishing parameters comprises a set of instructions providingparameters to establish a plurality of tunnels to a plurality of servicenodes of the first service provider (SP), the program further comprisinga set of instructions for providing a set of load balancing criteria forselecting tunnels in the plurality of first SP tunnels for the datamessage flows distributed to the first SP, said selection of tunnelsdistributing data message flows among the plurality of service nodes ofthe first SP in a load balanced way based on the load balancing criteriaset.